Xcode 4在发送给我的委托的performSelectorOnMainThread:withObject:waitUntilDone:
消息上给了我编译器警告,但我不明白。
我的代表被宣布如下:
@property (nonatomic, assign) id <AccountFeedbackDelegate> delegate;
然后最终在主线程上执行:
[self.delegate performSelectorOnMainThread:@selector(didChangeCloudStatus) withObject:nil waitUntilDone:NO];
然而,Xcode坚持给我:
'-performSelectorOnMainThread:withObject:waitUntilDone:‘警告:语义问题:未找到方法
(返回类型默认为'id')
当然,代码编译并运行良好,但我不喜欢这个警告。当我像这样重新声明委托时,警告就消失了,但是我不喜欢这样的解决方法:
@property (nonatomic, assign) NSObject <AccountFeedbackDelegate> *delegate;
我遗漏了什么?我做错什么了?干杯,
EP
发布于 2011-04-15 15:39:40
performSelectorOnMainThread:withObject:waitUntilDone:
在NSThread.h中NSObject
上的一个类别中声明。因为您的变量是id
类型的,所以编译器不能确定它能够响应为NSObject
定义的消息。与普通的id
变量不同,当变量声明为id <SomeProtocol>
时,编译器会警告您这一点。
因此,您确实应该声明您的代表为NSObject <AccountFeedbackDelegate>
。
PS:通过将协议声明为@protocol AccountFeedbackDelegate <NSObject>
来消除这种警告的“标准”方法在这里不能工作,因为performSelectorOnMainThread:withObject:waitUntilDone:
不是在NSObject
协议中声明的。
https://stackoverflow.com/questions/5679039
复制相似问题