保存MKPolyline为NSData的NSUserDefaults的中(Save MKPolyli

2019-07-20 02:10发布

我的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的转换,我得到这个错误信息:

终止应用程序由于未捕获的异常“NSInvalidArgumentException”,原因:“ - [MKPolyline encodeWithCoder:]:无法识别的选择发送到实例0xba1fd70

使用MKPolylineView,如果我能成功地执行上面的代码然而后来我得到MKPolyline背出观的问题。 我发现在所以这个Q / A ,但它并没有解决我的问题,因为它会改变的方式我的应用程序的功能。

我怎样才能保存MKPolyline? 我可以继承它,如果是的话你会说意味着什么? 或者是有办法与MKPolylineView办呢? 我失去了与NSCoder的东西吗?

Answer 1:

虽然你可以实现NSCoding自己的MKPolyline ,然后构建一个NSData表示和存储在NSUserDefaults ,它可能是更好的代表MKPolyline使用数组和字典,这NSUserDefaults可直接处理。

构建体,其封装每个点的x和y值的字典的阵列,并存储 NSUserDefaults代替MKPolyline

当加载默认值,获取数组,遍历字典重建点,然后重新创建MKPolyline



文章来源: Save MKPolyline as NSData in NSUserDefaults