Zeb*_*ebs 11 iphone objective-c subclassing ipad ios
我有一个问题子类MKPolygon.
我想添加一个简单的int tag属性,但我不断获取MKPolygon的实例而不是我的自定义类,因此调用setTag:会导致异常.
问题是MKPolygons是使用类方法创建的:polygonWithCoordinates: count:我不知道如何将其转换为我的类的实例(包括标记属性).
您如何向MKPolygon添加标签属性?
谢谢!
sku*_*kue 20
你应该使用一个类别(如@Seva建议)和objc_setAssociatedObject(如@hoha建议的那样).
@interface MKPolygon (TagExtensions)
@property (nonatomic) int tag;
@end
@implementation MKPolygon (TagExtensions)
static char tagKey;
- (void) setTag:(int)tag {
objc_setAssociatedObject( self, &tagKey, [NSNumber numberWithInt:tag], OBJC_ASSOCIATION_RETAIN );
}
- (int) tag {
return [objc_getAssociatedObject( self, &tagKey ) intValue];
}
@end
Run Code Online (Sandbox Code Playgroud)
除了链接到的API @hoha之外,您可能还需要查看ObjC指南的"关联引用"部分.
看起来开发人员MKPolygon没有让它继承友好.如果你想要的只是为这个实例添加一些标签,你可以
1)保持从MKPolygon实例地址到标签的映射(NSDictionary或CFDictionary).如果在设置的同一类中需要所有标记,则此解决方案很有效.
2)使用运行时直接将标签附加到多边形 - objc_setAssociatedObject(Objective-C Runtime Reference)
| 归档时间: |
|
| 查看次数: |
3070 次 |
| 最近记录: |