2016-11-09 28 views
0

我想在NSUserDefaults中保存我的MKPolyline和MKPolygon视图。我有,我已经实现了一个模型:无法使用NSCoding编码MKPolyline或MKPolygon

-(id)initWithCoder:(NSCoder *)aDecoder 
- (void)encodeWithCoder:(NSCoder *)aCoder 

然而,每当我试图编码我MKPolyLine我得到一个错误:

-[MKPolyline encodeWithCoder:]: unrecognized selector sent to instance 

我设置了所有异常断点并停止在该行:

[aCoder encodeObject:self.layerData forKey:@"layer"]; 

为layerData的属性是:

@property (strong, nonatomic) MKPolyline *layerData; 

为什么这可能发生的任何想法?

+0

为了将'initWithCoder:/ encodeWithCoder:'保存到'NSUserDefaults'中(即将其转换为NSData),您需要遵循NSCoding类。那么,MKPolyline不符合NSCoding。你可以做什么,而不是,是保存点或坐标(论文应该很容易保存),并从他们重建了MKPolyline。 – Larme

回答

1

虽然您可以为MKPolyline实现NSCoding,并且您可以创建一个NSData表示形式并将其存储在NSUserDefaults中,NSUserDefaults可以以键值形式存储在NSUserDefaults中。

构建阵列如果你有一个单行或多个阵列,并与各自的键/值使得它们形成一个字典约束力。其中有每个点的x和y值,并将其存储在NSUserDefaults中。

加载默认值时,获取数组,如果有多个MKPolyline,则在单行和字典的情况下遍历单个数组。然后用点重新创建MKPolyline。

+0

啊,我只是将我的注释CLLocationCoordinate2D的阵列CLLocation。我只需要遍历我存储的CLLocation项的数组并进行转换。似乎工作得很好。我给了你信用,因为你的回答帮助我找到了解决方案。谢谢! –

相关问题