从其父实例创建扩展类的实例

时间:2014-09-16 17:30:53

标签: objective-c

首先是背景:

我正在扩展CLBeacon以添加一些额外的字段和功能。

扩展类的标题如下所示

#import <CoreLocation/CoreLocation.h>

@interface CXBeacon : CLBeacon

@property (readonly) NSString * signature;

//..... some additional methods here .....

@end

然后我使用CLLocationManager查找附近的CLBeacons等。

问题是,由于CLLocationManager的委托方法传递了CLBeacon的实例,我该如何将它们转换为CXBeacon?我可以将CLBeacon转换为CXBeacon并将其称为一天吗?还是有一个我不知道的概念适用于这种情况?

1 个答案:

答案 0 :(得分:1)

总结:子类化CLBeacon可能无法满足您的需求。添加class category可能会做你想要的。

如您所知,CLBecaon通常在委托方法中提供给您,例如

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region

这意味着CLLocationManager或其他一些苹果类实际上正在创建CLBeacon实例(而不是您的子类CXBeacon实例),而您无法控制它。

类类别允许您获取现有类并对其进行扩展。要使用CLBeacon执行此操作,您可以创建CLBeacon+MyCategoryName.{h,m},您可以在CLLocationManager委托方法中使用(包括&#34; CLBeacon+MyCategoryName.h&#34;)。

请注意,类别中存在一些限制和警告 - 在您的情况下,使用属性意味着您需要实现动态setter和getter(请参阅上面的文档和blogs)。