加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c中的多个代表

发布时间:2020-12-14 18:13:34 所属栏目:百科 来源:网络整理
导读:我一直致力于将我的一个应用程序从“共享appdelegate”过程中移开,这个过程看起来很皱眉,尽管它的使用过度.我一直试图为我想做的事情设置协议方法,但我没有运气.我的问题是,你甚至可以让一个viewcontroller将委托请求发送到多个类吗?从我发现它似乎你不能.
我一直致力于将我的一个应用程序从“共享appdelegate”过程中移开,这个过程看起来很皱眉,尽管它的使用过度.我一直试图为我想做的事情设置协议方法,但我没有运气.我的问题是,你甚至可以让一个viewcontroller将委托请求发送到多个类吗?从我发现它似乎你不能.这是没有意义的,因为我认为这是与mvc的代表和协议的重点.现在只是为了澄清,我知道你可以让一个viewcontroller充当多个其他viewcontrollers的委托.但这不是我要问的.举一个简单的例子,假设你有苹果翻转实用工具模板. “完成”按钮只是调用mainvc的委托方法来解除它.现在我们假设我们添加了一个名为…的新类

@interface NewClass : NSObject <TheOtherDelegate>

它有一个委托方法……

- (void)doSomething
{
NSLog(@"The Delegate did something...");
}

我们可以在flipsideviewcontroller上有一个按钮,我们想要调用该委托方法,但是仍然对主视图控制器上的委托方法保持“完成”按钮调用,它会解散它吗?

话虽这么说,我把一个快速的项目放在一起,只是为了看看它是否会起作用,但事实并非如此.我遇到了一个“答案”,说你必须首先实例化你想成为代表的班级……

NewClass *myDelegate = [NewClass alloc] init]
[fillInMethodHere setDelegate:myDelegate];

不知道为什么它得到了正确的答案检查,因为不用说它不起作用.有什么我想念的吗?我搜索了ib,看看是否有某个“委托”连接,但我找不到任何东西.

在旁注上,当我在我的工作项目中工作时,我读到了关于删除#import并添加@class的建议.再次,这打破了各种各样的事情.奇怪的是,在此之前,我到目前为止所做的工作和建设都很好.当我删除新的@class并且未注释#import时. xcode突然给了我一个错误“无法找到协议减速……”但是,它早了几秒钟才工作.我将不得不删除协议代码并重新添加它以使其再次工作.非常痴迷.

任何帮助,将不胜感激. iv在文档,谷歌,堆栈等中读取的所有内容都应该有效,而不是在实际项目中.

解决方法

“代表”不是一个奇特的对象.它只是一个名为delegate的id类型的合成属性.如果您愿意,您可以拥有任意数量的属性,这些属性都符合相同的协议.然后,当您想要发出回调时,您只需解决所有问题:

[self.mydelegateA doSomething];
[self.mydelegateB doSomething];

等等

您还可以使用可以添加对象的NSMutableArray属性,然后使用[self.myMutableArrayOfDelegates makeObjectsPerformSelector:@selector(doSomething)].

最后,NSNotificationCenter的路径(不要与推送通知混淆)始终是一个提供对象间消息传递系统的类.许多对象可以注册任何其他对象可以发送的消息.

有关更多信息,请参阅Apple的文档. Click Here.

无论这是OS X文档的事实,它仍然非常善于直观地解释事物:click here.

这是一个简单地更改委托属性名称的示例:click here

这是添加另一个协议和第二个代理的示例:click here

最后,这是一个基于前两个的示例,并且具有符合相同协议的第三个委托:click here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读