3

我的 iOS 应用程序需要MKPolylineNSUserDefault. 我一直在做很多研究,现在我知道了:

  • NSUserDefaults 是 NSCoder 的子类
  • MKPolyline 不是 NSCoder 的子类

因此,将折线保存到是相当困难的。我试图将 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 从视图中移出时遇到问题。我在 SO 上找到了这个 Q/A,但它并没有解决我的问题,因为它会改变我的应用程序的运行方式。

如何保存 MKPolyline?我可以对它进行子类化吗,如果可以,那会带来什么?或者有没有办法用 MKPolylineView 做到这一点?我错过了 NSCoder 的东西吗?

4

1 回答 1

4

虽然您可以NSCoding自己实现 for MKPolyline,然后构造一个NSData表示并将其存储在 中,但表示using 数组和字典NSUserDefaults可能会更好,它们可以直接处理。MKPolylineNSUserDefaults

构造一个字典数组,其中封装了每个点的 x 和 y 值,并将其存储NSUserDefaults不是MKPolyline.

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

于 2013-02-18T00:54:51.247 回答