我有一堆保存在数组中的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属性效果很好,没有任何错误,它似乎存储变量。另一方面,获得它却起作用,但给我一个警告 - 在该协议中没有找到注释。重要的是让你知道叠加层也被添加为注释,并且我在我的mapView:viewForAnnotation:
方法中得到了'-notes not found in protocol'错误,对此,第二个参数是符合MKAnnotation
协议的id
。
现在,我明白它说MKAnnotation
协议没有实现-notes方法,但我从不声称它。我创建了一个具有两个额外方法(getter/setter)的类别,因此如果我对类别的理解是正确的,那么现在认为注释是MKPolygon的一种方法,是正确的吗?那为什么编译器给我这个警告?
另外值得注意的是:调用该方法实际上工作:我得到正确的结果,但我不喜欢在我的代码中有警告。
这并没有真正的帮助,但是,我找到了解决方案。由于viewForAnnotation中的参数:是一个'id',所以遵循MKAnnotation协议的任何对象都被接受了,也就是没有实现-notes方法的分类实例。在确定注解的类是MKPolygon之后,我将该变量指定为MKPolygon,并且我的警告消失了。 –
2011-06-12 08:53:24
很高兴知道你有东西锻炼!!!!!!! :) – 2011-06-13 02:41:18