2

我有一个带有地标数据属性的核心数据实体,我试图在其中存储一个 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核心数据属性中保存了数据,但它没有被解码回正确的对象。它基本上与这个问题中的问题相同:使用 NSKeyedUnarchiver 解码时出现问题,但未得到解答。

关于如何一起使用 NSKeyedArchiver 和 CoreData ,我在这里缺少一些基本的东西吗?在此先感谢您的任何提示...

4

1 回答 1

1

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

文档:可转换的属性

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

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

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

self.placemark = place.placemark

不需要乱搞NSKeyedArchivers。

于 2013-07-29T21:34:47.793 回答