使用关联对象在协议错误中找不到

时间:2011-06-12 08:21:42

标签: iphone objective-c

我有一堆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属性效果很好,没有错误,它似乎存储变量。另一方面,获取它可以工作,但是给了我一个警告 - 在该协议中没有找到-notes。重要的是让你知道叠加层也作为注释添加,并且我在mapView:viewForAnnotation:方法中得到了“在协议中找不到的注释”错误,其中第二个参数是{{1} }符合id协议。

现在,我知道它说MKAnnotation协议没有实现-notes方法,但我从未声称它确实如此。我用两个额外的方法(getter / setter)创建了一个类别,所以如果我对类别的理解是正确的,那么-notes现在被认为是MKPolygon的一种方法,对吗?那么为什么编译器会给我这个警告?

同样值得注意的是:调用该方法确实有效:我得到了正确的结果,但我不喜欢在我的代码中发出警告。

1 个答案:

答案 0 :(得分:0)

因为它是一个MKAnnotation错误..尝试在你的id中恭维它...这样的事情可能......

id<MKAnnotation,NSObject> delegate;

“MKAnnotation”可能是错误的东西,你必须在xcode库中查找它,但这是我最好的猜测...如果它有效,祝你好运,如果它没有好运,那么好运:哈哈