我有一个包含一些 Web 服务功能的 NSOperation。 NSOperation 有一个委托,当操作结束时将向该委托发送消息。
由于 NSOperation 位于不同的线程上,我必须像这样进行调用:
[delegate performSelectorOnMainThread:@selector(getDealersIDSuccess:) withObject:result waitUntilDone:YES];
它工作得很好,但它给了我一个警告:
警告:
'-performSelectorOnMainThread:withObject:waitUntilDone:'
在协议中找不到
我完全同意编译器在这一点上的观点,它看到一个委托,它检查协议,它没有找到performSelector方法的声明。
我的问题是:我可以通过以不同的方式拨打此电话来删除警告吗?
我的两个猜测是我可以(1)编写一个名为
- (void) callDelegateMethodOnMainThred {
[delegate getDealersIDSuccess:result]
}
并通过performSelectorOnMainThread调用它,但我发现该解决方案很麻烦,并且在委托之上有一个额外的、难以阅读的步骤。
第二种解决方案可能是将委托强制转换为选择器内父对象的类型,但这简直太疯狂了,并且违背了委托封装模式。
我真的很感激对语言有更好理解的人提供的第三种解决方案:)
先感谢您。
编辑:添加委托声明:
id <ISDealersIDDelegate> delegate;
我将我的代表声明为 id。委托本身扩展了 UIViewController。
我可以看到声明它 NSObject 是可行的。