2011-10-05 95 views
2

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

尝试使用此代码从数组采取MKPolylineViews和相应MKPolylines添加到地图,但它崩溃在“[MapView的addOverlay ....”线。

写作阵列的plist:从plist中

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

读取数据:

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

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

回答

1

我想看看有NSArchiver或归档的NSKeyedArchiver,然后写他们出到磁盘。可能比试图将他们挤入plist莫名其妙...

+0

我试过了,但我遇到了一些问题。我必须将地图上的MKPolylines更改为MKPolylineViews,以便它们符合NSCoding。一旦我将它们解码,我就很难将它们改回MKPolylines,我可以把它放在地图上。虽然我访问每个MKPolylineView的polyline属性,但编译器告诉我它是零,并且我的程序崩溃了。不知道为什么会发生。 –

+0

你有代码示例吗?我仍然认为我的建议方法是合理的,它可能只是尝试使用一些不同的变换器来正确归档和检索您的MKPolylines ... – isaac

+0

请参阅我的编辑请 –