DoS*_*DoS 4 xcode delegates protocols objective-c
我一直致力于将我的一个应用程序从"共享appdelegate"过程中移开,这个过程看起来很皱眉,尽管它的使用过度.我一直试图为我想做的事情设置协议方法,但我没有运气.我的问题是,你甚至可以让一个viewcontroller将委托请求发送到多个类吗?从我发现它似乎你不能.这是没有意义的,因为我认为这是与mvc的代表和协议的重点.现在只是为了澄清,我知道你可以让一个viewcontroller充当多个其他viewcontrollers的委托.但这不是我要问的.举一个简单的例子,假设你有苹果翻转实用工具模板."完成"按钮只是调用mainvc的委托方法来解除它.现在我们假设我们添加了一个名为...的新类
@interface NewClass : NSObject <TheOtherDelegate>
Run Code Online (Sandbox Code Playgroud)
它有一个委托方法......
- (void)doSomething
{
NSLog(@"The Delegate did something...");
}
Run Code Online (Sandbox Code Playgroud)
我们可以在flipsideviewcontroller上有一个按钮,我们想要调用该委托方法,但是仍然对主视图控制器上的委托方法保持"完成"按钮调用,它会解散它吗?
话虽这么说,我把一个快速的项目放在一起,只是为了看看它是否会起作用,但事实并非如此.我遇到了一个"答案",说你必须首先实例化你想成为代表的班级......
NewClass *myDelegate = [NewClass alloc] init]
[fillInMethodHere setDelegate:myDelegate];
Run Code Online (Sandbox Code Playgroud)
不知道为什么它得到了正确的答案检查,因为不用说它不起作用.有什么我想念的吗?我搜索了ib,看看是否有某个"委托"连接,但我找不到任何东西.
在旁注上,当我在我的工作项目中工作时,我读到了关于删除#import和添加的建议@class.再次,这打破了各种各样的事情.奇怪的是,在此之前,我到目前为止所做的工作和建设都很好.当我删除新的@class和未评论的#import.xcode突然给了我一个错误"无法找到协议减速......"但是,它早了几秒钟才工作.我不得不删除协议代码并重新添加它以使其再次工作.非常痴迷.
任何帮助,将不胜感激.iv在文档,谷歌,堆栈等中读取的所有内容都应该有效,而不是在实际项目中.
Jac*_*nce 12
"代表"不是一个奇特的对象.它只是一个id类型的合成属性delegate.如果您愿意,您可以拥有任意数量的属性,这些属性都符合相同的协议.然后,当您想要发出回调时,您只需解决所有问题:
[self.mydelegateA doSomething];
[self.mydelegateB doSomething];
Run Code Online (Sandbox Code Playgroud)
等等
您还可以拥有一个NSMutableArray可以添加对象的属性,然后使用[self.myMutableArrayOfDelegates makeObjectsPerformSelector:@selector(doSomething)].
最后,始终存在NSNotificationCenter(不与推送通知混淆)的路由是提供对象间消息传递系统的类.许多对象可以注册任何其他对象可以发送的消息.
有关更多信息,请参阅Apple的文档.点击这里.
无论这是OS X文档的事实,它仍然非常擅长直观地解释事物:点击这里.
这是一个简单地更改委托属性名称的示例:单击此处
这是添加另一个协议和第二个代表的示例:单击此处
最后,这是一个基于前两个的示例,并且第三个委托也符合相同的协议:单击此处
| 归档时间: |
|
| 查看次数: |
7562 次 |
| 最近记录: |