在核心数据中存储 CLLocation 坐标

Storing CLLocationCoordinates in Core Data

我在存储 MKMapItem 时遇到了一个问题,我可以通过查看编译器警告来解决这个问题,但我不明白 为什么 我是能够解决它或者如果我使用 "best practices".

我有一个 Object 模型,该模型将 MKMapItem 中的纬度和经度坐标分别存储为 NSManagedObject 中的 doubles。当我转到 Editor\Create NSManagedObject Subclass 并创建我的 class 时,header 看起来像这样:

@class LocationCategory;

@interface PointOfInterest : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * address;
// Xcode spat out NSNumber instead of the double specified in the model setup screen
@property (nonatomic, retain) NSNumber * latitude;
@property (nonatomic, retain) NSNumber * longitude;
@property (nonatomic, retain) NSString * note;
@property (nonatomic, retain) LocationCategory *locationCategory;

@end

一切都很好,直到我尝试将 object 添加到我的 managedObjectContext 我收到了这些警告:

Assigning to 'NSNumber *' from incompatible type 'CLLocationDegrees' (aka 'double')

这些行:

newPOI.latitude = self.item.placemark.location.coordinate.latitude;
newPOI.longitude = self.item.placemark.location.coordinate.longitude;

我通过更改 PointOfInterest : NSManagedObject subclass:

修复了它
@property (nonatomic) double latitude;
@property (nonatomic) double longitude;

这是让编译器满意的最好方法还是有更好的方法?

我建议您将 PointOfInterest 子类的属性改回 NSNumber,然后按如下方式更改纬度和经度的分配:

newPOI.latitude = [NSNumber numberWithDouble:self.item.placemark.location.coordinate.latitude];
newPOI.longitude = [NSNumber numberWithDouble:self.item.placemark.location.coordinate.longitude];

那么当你想使用纬度时:

self.item.placemark.location.coordinate.latitude = [newPOI.latitude doubleValue];

等等