序列化mkcoordinateregion以存储核心数据?

时间:2010-06-10 08:58:37

标签: iphone cocoa-touch mkmapview mapkit

使用核心数据存储MKCoordinateRegion的最佳方法是什么?我假设有一种方法可以将其转换为二进制数据吗?

非常感谢

2 个答案:

答案 0 :(得分:7)

MKCoordinateRegion region;

// region to NSData
NSData *data = [NSData dataWithBytes:&region length:sizeof(region)];    

// NSData to region
[data getBytes:&region 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);
}

如果您想要更聪明,可以创建一个自定义只读属性,公开内部数据,如上所述。