iphone - performSelector:withObject:afterDelay:'在协议中找不到?

Spa*_*Dog 14 iphone objective-c

我在课堂上有这个

[delegate performSelector:@selector(doStuff:) withObject:myObject afterDelay:2.0];
Run Code Online (Sandbox Code Playgroud)

我有这个错误

警告:'-performSelector:withObject:afterDelay:'在协议中找不到

我无法弄清楚可能出现的问题.

任何线索?

谢谢.

Dav*_*ong 30

您的问题是您已将委托实例变量声明为:

id<SomeProtocol> delegate;
Run Code Online (Sandbox Code Playgroud)

对?嗯,这意味着编译时检查器只会查找<SomeProtocol>协议中的方法.但是,performSelector:withObject:afterDelay:宣布NSObject.这意味着您应该将ivar声明为:

NSObject<SomeProtocol> * delegate;
Run Code Online (Sandbox Code Playgroud)

这表示它必须NSObject符合<SomeProtocol>,而不是任何符合的对象<SomeProtocol>.这应该摆脱你的警告,你不必做任何铸造.

  • @Gonzalo:`<NSObject>`协议与`NSObject`类不同.有问题的方法是在类上声明的,而不是协议,因此扩展协议不会有所作为. (2认同)