NSManagedObject的objectID:它是否一致?

hzx*_*zxu 7 core-data nsmanagedobject

我需要为索引数据提供一些唯一且一致的ID,我尝试使用NSManagedObject的objectID,但看起来对于同一个实体,它的objectID不断变化,是否有人知道这是不一致的?

lna*_*ger 18

除非您尚未保存新对象,否则objectID是唯一且一致的.

引用核心数据编程指南:

托管对象ID和URI

NSManagedObjectID对象是托管对象的通用标识符,并为核心数据框架中的统一提供了基础.托管对象ID在单个应用程序中的托管对象上下文之间以及多个应用程序(如在分布式系统中)中唯一标识相同的托管对象.与数据库中的主键一样,标识符包含准确描述持久存储中的对象所需的信息,但不公开详细信息.该框架完全封装了"外部"信息,并呈现了一个干净的面向对象的接口.

NSManagedObjectID *moID = [managedObject objectID]; 
Run Code Online (Sandbox Code Playgroud)

对象ID有两种形式.首次创建托管对象时,Core Data会为其分配一个临时ID; 只有将其保存到持久性存储时,Core Data才会为托管对象分配永久ID.您可以轻松发现ID是否是临时的:

BOOL isTemporary = [[managedObject objectID] isTemporaryID];
Run Code Online (Sandbox Code Playgroud)