• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - NSKeyedUnarchiver 不解码来自 CoreData 数据属性的 CLPlacemark 对象

[复制链接]
菜鸟教程小白 发表于 2022-12-12 13:01:49 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个带有地标数据属性的核心数据实体,我试图在其中存储一个 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap