OGeek|极客世界-中国程序员成长平台

标题: ios - NSKeyedUnarchiver 不解码来自 CoreData 数据属性的 CLPlacemark 对象 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 13:01
标题: ios - NSKeyedUnarchiver 不解码来自 CoreData 数据属性的 CLPlacemark 对象

我有一个带有地标数据属性的核心数据实体,我试图在其中存储一个 CLPlacemark 对象。

@interface ZJPlace : NSManagedObject
...     
@property (nonatomic, retain) NSData * placemark;

我正在像这样对对象进行编码:

place.placemark = [NSKeyedArchiver archivedDataWithRootObject:self.placemark];

并像这样解码:

self.placemark = [NSKeyedUnarchiver unarchiveObjectWithData:place.placemark];

在解码时,我没有收到错误或返回 nil - 它看起来像一个空的 CLPlacemark 对象(self.placemark 的类是 CLPlaceMarkdescription 不会在日志中打印任何内容。)

我可以看到 place.placemark 核心数据属性中保存了数据,但它没有被解码回正确的对象。这与这个问题基本相同:Trouble decoding with NSKeyedUnarchiver没有得到答复。

关于如何一起使用 NSKeyedArchiver 和 CoreData,我是否缺少一些基本的东西?提前感谢您的任何提示...



Best Answer-推荐答案


Durrr...当然,我已经完全忘记了 Core Data 如何存储复杂对象的基本知识。希望这可以帮助其他一些像我一样一无所知的新手。叹。

文档:Transformable attributes

所以这是我上面关于在核心数据中编码 CLPlacemark 的问题的非常简单的解决方案:

  1. 将 Core Data 模型中的属性类型更改为 Transformable
  2. 在 NSManagedObject 子类的 header 中,记住将 NSManagedObject's 属性的类型从 NSData 更改为您尝试编码的任何类,在我的例子中是 CLPlacemark

然后像使用普通对象一样使用属性,例如

self.placemark = place.placemark

无需使用 NSKeyedArchiver

关于ios - NSKeyedUnarchiver 不解码来自 CoreData 数据属性的 CLPlacemark 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17903579/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4