NSKeyedUnarchiver不会从CoreData数据属性解码CLPlacemark对象

时间:2013-07-27 23:43:40

标签: ios core-data nskeyedarchiver

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

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

我正在编码这样的对象:

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

并像这样解码:

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

在解码时,我没有收到错误或没有回来 - 它看起来像一个空的CLPlacemark对象(self.placemark的类是CLPlaceMarkdescription不打印什么东西到日志。)

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

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

1 个答案:

答案 0 :(得分:1)

Durrr ...当然基本的东西我完全忘记了Core Data如何存储复杂的对象。希望这能帮助那些像我一样无能为力的其他新手。叹。

文档:Transformable attributes

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

  1. 将Core Data模型中的属性类型更改为Transformable
  2. 在NSManagedObject子类的标头中,请记住将NSManagedObject's属性的类型从NSData更改为您尝试编码的任何类,在我的情况下CLPlacemark
  3. 然后就像使用普通对象一样使用属性,例如

    self.placemark = place.placemark
    

    不需要NSKeyedArchiver来解决问题。