【问题标题】:Saving MKOverlayView array -> plist保存 MKOverlayView 数组 -> plist
【发布时间】:2011-10-05 22:45:33
【问题描述】:

我有一个涉及大量 MKOverlayViews 的应用程序。每次将一个添加到地图时,它也会添加到一个 NSArray。当用户希望停止添加叠加层时,我希望他们能够保存它们,并且以后能够访问它们。如何将一组 MKOverlayViews 存储到 plist 中,然后稍后将它们重新加载回 mapView?这可能吗?

尝试使用此代码从数组中获取 MKPolylineViews 并将相应的 MKPolylines 添加到地图,但它在“[mapView addOverlay...”行崩溃。

将数组写入 plist:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if(overlays)
{
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:overlays];
    [defaults setObject:data forKey:@"theKey"];
    [defaults synchronize];
}

从 plist 中读取数据:

NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"theKey"];
NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithData:data];

for(MKPolylineView* a in arr)
    [mapView addOverlay:a.polyline];

【问题讨论】:

    标签: objective-c ios nsarray plist mkoverlay


    【解决方案1】:

    我会考虑使用 NSArchiver 或 NSKeyedArchiver 进行归档,然后将它们写入磁盘。可能比试图以某种方式将它们挤进一个 plist 更好......

    【讨论】:

    • 我试过了,但遇到了一些问题。我必须将地图上的 MKPolylines 更改为 MKPolylineViews,以便它们符合 NSCoding 标准。解码它们后,我很难将它们改回可以放在地图上的 MKPolylines。虽然我访问了每个 MKPolylineView 的折线属性,但编译器告诉我它是 nil,我的程序崩溃了。不知道为什么会这样。
    • 你有代码示例吗?我仍然认为我建议的方法是一种合理的方法,它可能只是尝试一些不同的转换器来正确存档和检索您的 MKPolylines...
    猜你喜欢
    • 2013-03-18
    • 2012-01-22
    • 2013-12-15
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多