【问题标题】:NSKeyedArchiver encode only part of an arrayNSKeyedArchiver 只编码数组的一部分
【发布时间】:2011-05-27 20:23:45
【问题描述】:

我有一个有时会更改的对象列表,并且我想在应用程序关闭或移至后台时在设备上保留一个持久缓存。 列表中的大多数对象都不会改变,所以我想知道保存列表的最佳方法是什么。我有两个主要的选择:

  1. 使用 NSKeyedArchiver / unArchiver - 这是最方便的方法,因为我正在序列化的对象包含其他自定义对象,因此我可以为每个对象编写自定义编码方法。主要问题是我在谷歌上没有找到如何只序列化更改的对象,每次序列化整个列表似乎非常浪费。

  2. 使用 SQLite - 这是我目前正在使用的,这里最糟糕的问题是添加 \ 更改对象的属性非常复杂,而且不太优雅。

有什么方法可以让我享受 NSKeyedArchiver 的便利,但只序列化改变的对象?

【问题讨论】:

  • 您考虑过使用核心数据吗? NSKeyedArchiver 只能一次读取所有内容。
  • 是的,但是实现核心数据对我的应用来说是一个重大变化,而且是一个巨大的矫枉过正。
  • 您对使用 NSKeyedArchiver 的列表大小有什么建议吗?我的列表将包含大约 1000-2000 个项目,每个项目最多 500 个字节。

标签: iphone cocoa sqlite nskeyedarchiver nscoder


【解决方案1】:

像 Adam Ko 一样,我建议使用 Core Data:
毕竟这种问题才是它真正擅长的!

如果您的缓存项彼此独立,这可以通过简单地包装您的缓存项由NSManagedObject 的薄层来实现(即您可以从 Core Data 中受益,只需少量更改您的应用)。

此包装实体可以将缓存项的存档版本存储在 NSBinaryDataAttributeType 类型的属性中,并通过瞬态属性提供对未存档对象的访问。 示例见Non-Standard Persistent Attributes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 2017-01-05
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多