Iphone NSKeyedArchiver仅对数组的一部分进行编码

Iphone NSKeyedArchiver仅对数组的一部分进行编码,iphone,cocoa,sqlite,nskeyedarchiver,nscoder,Iphone,Cocoa,Sqlite,Nskeyedarchiver,Nscoder,我有一个对象列表,这些对象有时会发生变化,我希望在应用程序关闭或移动到后台时在设备上保留一个持久缓存。 列表中的大多数对象都不会更改,所以我想知道保存列表的最佳方法是什么。我有两个主要的选择: 使用NSKeyedArchiver/unArchiver-这是最方便的方法,因为我正在序列化的对象包含其他自定义对象,所以通过这种方式,我可以为每个对象编写一个自定义编码方法。主要的问题是,我没有在Google上找到如何只序列化更改的对象,每次序列化整个列表似乎都非常浪费 使用SQLite-这就是我目前正

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

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

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


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

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

    如果您的缓存项彼此独立,只需将缓存项包装成一层薄薄的
    NSManagedObject
    (也就是说,只需对应用程序进行微小更改,您就可以从核心数据中获益)

    此包装器实体可以将缓存项的存档版本存储在类型为
    NSBinaryDataAttributeType
    的属性中,并通过临时属性提供对未存档对象的访问。
    请参见示例。

    您是否考虑过使用核心数据?NSKeyedArchiver只能一次读取所有内容。是的,但实现核心数据是对我的应用程序的一个重大更改,也是一个巨大的过度消耗。您对使用NSKeyedArchiver的列表大小有何建议?我的列表将容纳大约1000-2000个条目,每个条目最多500字节。