我有一堆MKPolygon
保存在一个数组中,但是我想保存比MKPolygon类有更多数据的存储空间(更具体地说:一个描述多边形是什么的注释字段)。由于某种原因,子类化是不可能的,所以我发现关联对象的特征,就我的目的而言,足够好。这就是我的.m的样子:
@implementation MKPolygon (ExtraProperties)
static char notesKey;
- (void)setNotes:(NSString *)notes {
objc_setAssociatedObject(self, ¬esKey, notes, 1);
}
- (NSString *)notes {
return objc_getAssociatedObject(self, ¬esKey);
}
我的.h只声明了此类别的属性:
@interface MKPolygon (ExtraProperties)
@property (nonatomic, retain) NSString *notes;
@end
设置notes属性效果很好,没有错误,它似乎存储变量。另一方面,获取它可以工作,但是给了我一个警告 - 在该协议中没有找到-notes。重要的是让你知道叠加层也作为注释添加,并且我在mapView:viewForAnnotation:
方法中得到了“在协议中找不到的注释”错误,其中第二个参数是{{1} }符合id
协议。
现在,我知道它说MKAnnotation
协议没有实现-notes方法,但我从未声称它确实如此。我用两个额外的方法(getter / setter)创建了一个类别,所以如果我对类别的理解是正确的,那么-notes现在被认为是MKPolygon的一种方法,对吗?那么为什么编译器会给我这个警告?
同样值得注意的是:调用该方法确实有效:我得到了正确的结果,但我不喜欢在我的代码中发出警告。
答案 0 :(得分:0)
因为它是一个MKAnnotation错误..尝试在你的id中恭维它...这样的事情可能......
id<MKAnnotation,NSObject> delegate;
“MKAnnotation”可能是错误的东西,你必须在xcode库中查找它,但这是我最好的猜测...如果它有效,祝你好运,如果它没有好运,那么好运:哈哈