2011-06-12 56 views
0

我有一堆保存在数组中的MKPolygon,但我想要保存比MKPolygon类具有存储空间更多的数据(更具体地说:描述该多边形的注释字段) 。出于某种原因,子类化是不可能的,所以我发现了关联对象功能,就我而言,它足够好。这是我的.m是什么样子:在使用关联对象的协议错误中找不到

@implementation MKPolygon (ExtraProperties) 

static char notesKey; 

- (void)setNotes:(NSString *)notes { 

    objc_setAssociatedObject(self, &notesKey, notes, 1); 
} 

- (NSString *)notes { 

    return objc_getAssociatedObject(self, &notesKey); 
} 

我的.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的一种方法,是正确的吗?那为什么编译器给我这个警告?

另外值得注意的是:调用该方法实际上工作:我得到正确的结果,但我不喜欢在我的代码中有警告。

回答

0

因为它是一个MKAnnotation错误..尝试在你的ID implimenting它...这样的事情可能..

id<MKAnnotation,NSObject> delegate;

“MKAnnotation”可能是错误的东西放,你会必须在xcode库中查找它,但这是我最好的猜测...如果它运作良好的运气,如果它没有/好运气:/ haha​​

+0

这并没有真正的帮助,但是,我找到了解决方案。由于viewForAnnotation中的参数:是一个'id ',所以遵循MKAnnotation协议的任何对象都被接受了,也就是没有实现-notes方法的分类实例。在确定注解的类是MKPolygon之后,我将该变量指定为MKPolygon,并且我的警告消失了。 – 2011-06-12 08:53:24

+0

很高兴知道你有东西锻炼!!!!!!! :) – 2011-06-13 02:41:18