在NSUserDefaults中将MKPolyline保存为NSData
我的iOS应用程序需要在MKPolyline
存储NSUserDefault
。 我一直在做很多研究,现在我知道:
- NSUserDefaults是NSCoder的子类
- MKPolyline不是NSCoder的子类
因此,将折线保存到nsuserdefaults相当困难。 我试图将MKPolyline转换为NSData:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSData *data = [NSKeyedArchiver archivedDataWithRootObject:routeLine]; // routeLine is an MKPolyline [defaults dataForKey:@"key"]; [defaults synchronize];
当我尝试将折线转换为NSData时,我收到以下错误消息:
因未捕获的exception’NSInvalidArgumentException’而终止应用程序,原因:’ – [MKPolyline encodeWithCoder:]:无法识别的选择器发送到实例0xba1fd70
我可以在使用MKPolylineView时成功执行上述代码,但是我遇到了将MKPolyline从View中取回的问题。 我在SO上找到了这个Q / A,但它没有解决我的问题,因为它会改变我的应用程序的运行方式。
如何保存MKPolyline? 我可以将其子类化,如果是这样的话会带来什么? 或者有没有办法用MKPolylineView做到这一点? 我错过了NSCoder的东西吗?
虽然您可以自己为MKPolyline
实现NSCoding
,然后构建一个NSData
表示并将其存储在NSUserDefaults
,但使用NSUserDefaults
可以直接处理的数组和字典表示MKPolyline
可能更好。
构造一个字典数组,封装每个点的x和y值,并将其存储在NSUserDefaults
而不是MKPolyline
。
加载默认值时,获取数组,循环重构点的字典,然后重新创建MKPolyline
。