Ios 区分从内存中托管对象上下文和持久存储中获取的对象

Ios 区分从内存中托管对象上下文和持久存储中获取的对象,ios,cocoa,core-data,Ios,Cocoa,Core Data,在iOS应用程序中,我使用一个框架创建NSManagedObject子类对象,该框架解析JSON对象,然后将它们插入NSManagedObjectContext。但是,我想区分那些新创建的对象和那些已经保存到持久存储中的对象。这是因为我可能需要更新或覆盖存储中的某些对象。当我执行NSFetchRequest时,它只返回所有注册的对象,包括从存储中获取的对象和我在内存中本地创建的对象。如何区分这两种类型的对象?您可以通过查看托管对象的对象ID来判断托管对象是否已被保存。请检查myObject.ob

在iOS应用程序中,我使用一个框架创建
NSManagedObject
子类对象,该框架解析JSON对象,然后将它们插入
NSManagedObjectContext
。但是,我想区分那些新创建的对象和那些已经保存到持久存储中的对象。这是因为我可能需要更新或覆盖存储中的某些对象。当我执行
NSFetchRequest
时,它只返回所有注册的对象,包括从存储中获取的对象和我在内存中本地创建的对象。如何区分这两种类型的对象?

您可以通过查看托管对象的对象ID来判断托管对象是否已被保存。请检查
myObject.objectID.isTemporaryID
,在首次保存对象之前,该ID将为
true
,此后将为
false


然而,正如@Paulw11在评论中提到的,在这种情况下,在创建新对象之前,最好先确定是否已经有了本地对象。这样就避免了重复的问题。您可以更新现有对象上的值,也可以删除并替换它。

为什么不延迟插入新对象,直到您确定是否存在匹配的对象?或者,您可以使用多个托管对象上下文,但这似乎是一个过于复杂的解决方案。我想我可以通过使用两个上下文来解决这个问题,一个用于创建对象,另一个用于从持久性存储读取,但这似乎过于复杂了。