Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data NSManagedObject的objectID:是否一致?_Core Data_Nsmanagedobject - Fatal编程技术网

Core data NSManagedObject的objectID:是否一致?

Core data NSManagedObject的objectID:是否一致?,core-data,nsmanagedobject,Core Data,Nsmanagedobject,我需要一些唯一且一致的ID来索引数据,我尝试使用NSManagedObject的objectID,但对于同一个实体,它的objectID不断变化,有人知道这是否不一致吗?除非您没有保存新对象,否则objectID是唯一且一致的 引述: 托管对象ID和URI NSManagedObjectID对象是托管对象的通用标识符 对象,并为核心数据框架中的uniquing提供基础。A. 托管对象ID唯一标识两个对象的同一个托管对象 在单个应用程序中的托管对象上下文之间,以及 多个应用程序(如在分布式系统中)

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

除非您没有保存新对象,否则objectID是唯一且一致的

引述:

托管对象ID和URI

NSManagedObjectID对象是托管对象的通用标识符 对象,并为核心数据框架中的uniquing提供基础。A. 托管对象ID唯一标识两个对象的同一个托管对象 在单个应用程序中的托管对象上下文之间,以及 多个应用程序(如在分布式系统中)。就像初选一样 在数据库中,标识符包含所需的信息 准确描述持久存储中的对象,尽管 详细信息不公开。整个框架 封装“外部”信息并呈现干净的对象 面向对象的接口

NSManagedObjectID *moID = [managedObject objectID]; 
有两个 对象ID的形式。首次创建托管对象时,核心
数据为其分配一个临时ID;仅当它被保存到一个持久的 存储核心数据是否为托管对象分配永久ID。您可以 随时发现ID是否是临时的:

BOOL isTemporary = [[managedObject objectID] isTemporaryID];

“仅当它保存到持久性存储中时”,这是否意味着在[context save]之后而不是在实体创建之后?是的,正如svena所说,它是在[context save]之后分配的永久对象id。您是否可以稍微澄清一下这一点。例如,如果我想将数据存储在SQL数据库中。如果在两个不同的设备上创建对象,是否可以使它们具有相同的objectID?换句话说,如果我想创建一个同步引擎,objectID是正确的“唯一”标识符吗?实际上,我编写了自己的个人ID,它使用对象类+时间戳。虽然不太好,但它完成了任务。不过,最好有一个更核心/系统级的ID。@nazbot:不,唯一的对象ID仅对此设备上的对象唯一。如果您有两个不同的设备,它们将具有不同的对象ID(即使所有属性都相同)。@nazbot:我有相同的要求。我为每个记录创建了一个名为uuid的新字符串字段,并将其设置为必需字段。通过这种方式,它不受CoreData控制,并允许我将UUID绑定到每个记录。