objective-c - objective-c 中的多个委托(delegate)

标签 objective-c xcode delegates protocols

我一直在努力将我的一个应用程序从“共享应用程序委托(delegate)”过程中移开,尽管它被过度使用,但它似乎不受欢迎。我一直在尝试为我想做的事情设置协议(protocol)方法,但运气为零。我的问题是,你甚至可以让一个 viewcontroller 将委托(delegate)请求发送到多个类吗?从我发现的情况来看,你似乎做不到。这没有意义,因为我认为这是 mvc 的委托(delegate)和协议(protocol)的全部意义所在。现在澄清一下,我知道您可以让一个 View Controller 充当多个其他 View Controller 的委托(delegate)。但这不是我要问的。举个简单的例子,假设您有 apples flip-utility 模板。 “完成”按钮只是调用 mainvc 的委托(delegate)方法来关闭它。现在假设我们添加了一个名为...的新类

@interface NewClass : NSObject <TheOtherDelegate>

它有一个委托(delegate)方法...

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

我们能否在 flipsideviewcontroller 上有一个按钮,我们想要调用该委托(delegate)方法,但仍保留对 mainviewcontroller 上的委托(delegate)方法的“完成”按钮调用以关闭它?

话虽这么说,但我还是快速组织了一个项目,只是想看看它是否可行。我遇到了一个“答案”,说你必须首先实例化你想成为委托(delegate)的类......

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

不确定为什么它得到正确答案检查,因为不用说它不起作用。有什么我想念的吗?我搜索了 ib 以查看某处是否有一些“委托(delegate)”连接,但我找不到任何东西。

旁注,当我在我的工作项目中工作时,我阅读了关于删除 #import 并添加 @class 的建议。再次,这打破了各种各样的事情。奇怪的是,在这样做之前,我到目前为止所做的工作和 build 都很好。当我删除新的 @class 并取消注释 #import 时。 xcode 突然给了我一个错误“找不到...的协议(protocol)减速”但是,它在几秒钟前就开始工作了。我会不得不删除协议(protocol)代码并重新添加它以使其再次工作。非常明星。

如有任何帮助,我们将不胜感激。 iv 在文档、谷歌、堆栈等中阅读的所有内容都说应该有效,但在实际项目中却行不通。

最佳答案

“委托(delegate)”不是什么花哨的对象。它只是一个名为 delegate 的 id 类型的综合属性。如果你愿意,你可以拥有任意数量的属性,它们都符合相同的协议(protocol)。然后当你想发出回调时,你只需解决所有这些问题:

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

等等

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

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

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

尽管这是 OS X 文档,但它仍然非常擅长直观地解释事物:click here.

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

下面是添加另一个协议(protocol)和第二个委托(delegate)的示例:click here

最后,这里有一个例子,它建立在前两个之上,并且有第三个委托(delegate)也符合相同的协议(protocol):click here

关于objective-c - objective-c 中的多个委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10358917/

相关文章:

c# - 使用 .net2 返回委托(delegate)的方法

ios - 为类的私有(private)方法创建类扩展

iphone - OpenCV cv::dft()iOS断言错误

ios - 允许动画在下一行之前完成

ios - Xcode/iOS - CFBundleAlternateIcons 未更改

ios - 如何/在哪里设置委托(delegate)

c# - 在 C# 中,您能否将一个委托(delegate)的结果链接为另一个委托(delegate)的输入?

objective-c - 在 NSCache 中使用 NSPurgeabledata 有什么意义?

objective-c - 有没有办法在系统范围内注入(inject) OS X 系统框架?

objective-c - XCode 4.0 中的 "Incomplete implementation"警告