我有这个代码:
if([annotation respondsToSelector:@selector(tag)]){
disclosureButton.tag = [annotation tag];
}
我收到警告:
在协议中找不到“-tag”
int tag
很公平,但是我已经使用具有合成变量的协议创建了一个新对象。
编辑:找到应用程序崩溃的原因 - 不是这一行。现在我只收到一个警告,该应用程序运行良好。
谢谢汤姆
我有这个代码:
if([annotation respondsToSelector:@selector(tag)]){
disclosureButton.tag = [annotation tag];
}
我收到警告:
在协议中找不到“-tag”
int tag
很公平,但是我已经使用具有合成变量的协议创建了一个新对象。
编辑:找到应用程序崩溃的原因 - 不是这一行。现在我只收到一个警告,该应用程序运行良好。
谢谢汤姆
生成警告是因为对于 , 的静态类型,没有方法。正如您已经检查过动态类型是否响应选择器一样,在这种情况下您可以忽略警告。annotation
MKAnnotation
-tag
要摆脱警告:
如果您期望某个类,则可以对其进行测试:
if ([annotation isKindOfClass:[TCPlaceMark class]]) {
disclosureButton.tag = [(TCPlaceMark *)annotation tag];
}
对于协议:
if ([annotation conformsToProtocol:@protocol(PlaceProtocol)]) {
disclosureButton.tag = [(id<PlaceProtocol>)annotation tag];
}
或者,如果两者都不适用,请使用特定协议来抑制警告(例如,对于快速更改的 Apple API 很有用):
@protocol TaggedProtocol
- (int)tag;
@end
// ...
if([annotation respondsToSelector:@selector(tag)]){
disclosureButton.tag = [(id<TaggedProtocol>)annotation tag];
}