我的主要问题是存储 Core Data 不支持的数据。我已经将 CLLocation 属性存储为可转换属性。我认为正确的方法是声明一个瞬态坐标属性。但是,我不断收到 EXC_BAD_ACCESS 错误。
编辑:
我当前的子类具有以下接口:
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
@interface Event : NSManagedObject {
}
@property (nonatomic, retain) NSString* title;
@property (nonatomic, retain) NSDate* timeStamp;
@property (nonatomic, retain) CLLocation *location;
@end
所以我需要添加
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
和
- (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate;
以符合协议。(setCoordinate 是可选的,但如果我想让注释可拖动,我需要它)
在核心数据中,位置属性是可转换的。我在实现中使用@dynamic 来生成访问器。我在整个代码中都使用了这个属性,所以我不想保留它。
我认为最好的解决方法是将核心数据中的坐标属性定义为瞬态,但我并不一定在实现上做错了什么。
- (CLLocationCoordinate2D)coordinate {
CLLocationCoordinate2D cor = CLLocationCoordinate2DMake(self.location.coordinate.latitude,
self.location.coordinate.longitude);
return cor;
}
- (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate {
CLLocation *newLoc = [[CLLocation alloc] initWithLatitude:newCoordinate.latitude
longitude:newCoordinate.longitude];
[self.location release];
self.location = newLoc;
}
我尝试了几种方法,但这是最近的一种。
编辑 2: EXC_BAD_ACCESS 在:
_kvcPropertysPrimitiveSetters