我有一个带有地标数据属性的核心数据实体,我试图在其中存储一个 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 的类是 CLPlaceMark 但 description 不会在日志中打印任何内容。)
我可以看到 place.placemark 核心数据属性中保存了数据,但它没有被解码回正确的对象。这与这个问题基本相同:Trouble decoding with NSKeyedUnarchiver没有得到答复。
关于如何一起使用 NSKeyedArchiver 和 CoreData,我是否缺少一些基本的东西?提前感谢您的任何提示...
Best Answer-推荐答案 strong>
Durrr...当然,我已经完全忘记了 Core Data 如何存储复杂对象的基本知识。希望这可以帮助其他一些像我一样一无所知的新手。叹。
文档:Transformable attributes
所以这是我上面关于在核心数据中编码 CLPlacemark 的问题的非常简单的解决方案:
- 将 Core Data 模型中的属性类型更改为
Transformable
- 在 NSManagedObject 子类的 header 中,记住将
NSManagedObject's 属性的类型从 NSData 更改为您尝试编码的任何类,在我的例子中是 CLPlacemark
然后像使用普通对象一样使用属性,例如
self.placemark = place.placemark
无需使用 NSKeyedArchiver 。
关于ios - NSKeyedUnarchiver 不解码来自 CoreData 数据属性的 CLPlacemark 对象,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/17903579/
|