【问题标题】:NSKeyedUnarchiver doesn't decode CLPlacemark object from CoreData data attributeNSKeyedUnarchiver 不解码来自 CoreData 数据属性的 CLPlacemark 对象
【发布时间】:2013-07-27 23:43:39
【问题描述】:

我有一个带有地标数据属性的核心数据实体,我试图在其中存储一个 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,我是否缺少一些基本的东西?提前感谢您的任何提示...

【问题讨论】:

    标签: ios core-data nskeyedarchiver


    【解决方案1】:

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

    文档:Transformable attributes

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

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

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

    self.placemark = place.placemark
    

    不需要NSKeyedArchivers。

    【讨论】:

      猜你喜欢
      • 2020-03-20
      • 2014-08-26
      • 2016-02-15
      • 2011-03-20
      • 2020-01-12
      • 2020-01-10
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多