使用核心数据存储MKCoordinateRegion的最佳方法是什么?我假设有一种方法可以将其转换为二进制数据吗?
非常感谢
朱
答案 0 :(得分:7)
MKCoordinateRegion region;
// region to NSData
NSData *data = [NSData dataWithBytes:®ion length:sizeof(region)];
// NSData to region
[data getBytes:®ion length:sizeof(region)];
这适用于任何iOS版本,适用于任何带有Core Data,NSUserDefaults或NSKeyedArchiver的结构。它可以在同一架构上运行的任何系统之间移植(所有iOS版本都在小端32位上运行) 如果您将其用于archiving,则替代方法为subclassing NSCoder或创建NSCoder category。
答案 1 :(得分:1)
我的建议是简单地将MKCoordinateRegion的struct值(纬度,经度,latitudeDelta和longitudeDelta)存储为单独的属性,然后在模型类上提供一个自定义访问器,将它们组装成MKCoordinateRegion对象。
例如:
// Snip...boilerplate CoreData code goes here...
@dynamic latitude;
@dynamic longitude;
@dynamic latitudeDelta;
@dynamic longitudeDelta;
- (MKCoordinateRegion)region {
CLLocationCoordinate2D center = {
[self.latitude floatValue],
[self.longitude floatValue]
};
MKCoordinateSpan span = {
[self.latitudeDelta floatValue],
[self.longitudeDelta floatValue]
};
return MKCoordinateRegionMake(center, span);
}
如果您想要更聪明,可以创建一个自定义只读属性,公开内部数据,如上所述。