NSKeyedArchiver仅编码数组的一部分

时间:2010-12-19 12:55:28

标签: iphone cocoa sqlite nskeyedarchiver nscoder

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

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

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

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

1 个答案:

答案 0 :(得分:0)

与Adam Ko一样,我建议使用核心数据:
毕竟,这种问题是它真正擅长的问题!

如果您的缓存项目彼此独立,可以通过包装缓存项目来实现这一点NSManagedObject(即您可以从核心数据中获益)只对您的应用进行细微更改。)

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