Xcode 4给我发送给我的代表的performSelectorOnMainThread:withObject:waitUntilDone:
消息的编译器警告,但是我没有得到它。
我的代表被宣布为:
@property (nonatomic, assign) id <AccountFeedbackDelegate> delegate;
然后最终在主线程上执行:
[self.delegate performSelectorOnMainThread:@selector(didChangeCloudStatus) withObject:nil waitUntilDone:NO];
然而Xcode继续给我:
警告:语义问题:方法'-performSelectorOnMainThread:withObject:waitUntilDone:'not found(返回类型默认为'id')
当然代码编译并运行正常,但我不喜欢警告。当我重新声明这样的代表时,警告就会消失,但我不喜欢这种解决方法:
@property (nonatomic, assign) NSObject <AccountFeedbackDelegate> *delegate;
我错过了什么?我做错了什么?
干杯,
EP
答案 0 :(得分:19)
performSelectorOnMainThread:withObject:waitUntilDone:
在NSThread.h中NSObject
的类别中声明。由于您的变量的类型为id
,因此编译器无法确定它是否可以响应为NSObject
定义的消息。与普通的id
变量不同,当您的变量被声明为id <SomeProtocol>
时,编译器会向您发出警告。
所以你确实应该将你的代表声明为NSObject <AccountFeedbackDelegate>
。
PS:通过将协议声明为@protocol AccountFeedbackDelegate <NSObject>
来摆脱此类警告的“标准”方法在此处不起作用,因为performSelectorOnMainThread:withObject:waitUntilDone:
协议中未声明NSObject