我正在寻找序列化一组核心数据对象(可能是JSON),并且一直在做reading on the subject。我可能会序列化/反序列化JSON数据,以允许iOS用户轻松导出和重新导入其数据。这可能是在同一设备上备份和还原,或将数据导入到全新设备上的情况。
这时我的主要问题是在导入期间如何处理现有数据的标识。如果要重新导入商店中已存在的对象,则理想情况下是要对其进行更新。同样,我想保留所有未包含在导入中的现有数据。在这种情况下,最佳做法是什么?我应该在创建每个NSManagedObject时为其分配唯一的ID,并在确定对象是否相等时比较此ID吗?
我知道每个NSManagedObject都有一个objectID分配给它,但是我不能完全确定我可以依靠它,因为导出的数据可以导入到一个完全独立的设备中(其中objectID很可能会冲突,或者很有可能是对象将在创建时被分配一个新的objectID)。
最佳答案
导入期间如何处理现有数据的标识?
我将为每个项目分配自己的唯一标识符,因此导入/同步/导出也可以用于其他体系结构(您可能还需要包括版本信息)。这将允许跨设备识别对象。
导出到其他设备时,不能依赖objectID:
无法创建具有特定对象ID(see here)的托管对象,这将使得避免分配您自己的标识符以进行导入/同步/导出(除非您将整个数据库文件上传/下载到其他设备)。
请记住,CoreData中的Uniquing(主键)并非易事,如果操作不正确,可能会影响性能。