核心数据首次使用不同的对象ID

时间:2015-12-25 18:04:18

标签: ios core-data

我正在使用实体的对象ID ,以便唯一地标识本地通知并对其进行修改。我观察到,第一次保存我的实体时,它跟随object ID

<x-coredata:///Task/tE1C5A230-A419-42D5-AF78-3327A09D13BD2>

如果我不退出申请,并尝试修改通知,object ID不会更改,我可以修改我的通知。

现在,如果我重新启动我的应用并尝试再次访问该实体,则它有不同的object ID

<x-coredata://D6703834-ECB4-487B-84F8-330A215E16B7/Task/p13>

所以我无法修改通知,因为实体的object ID不同。有趣的是,每当我访问该实体时,Object ID仍然与最后一个实体相同。

所以我的问题就是为什么核心数据会为第一次实体创建不同的对象ID ?当我再次打开应用程序多次尝试访问实体后,对象ID(与第一个不同)保持不变。我很想知道它为什么会这样发生呢?

请注意: 我知道SO上有很多帖子指出使用Object ID并不是一种可靠的方法。我仍然想知道为什么要显示两个ID的原因。

1 个答案:

答案 0 :(得分:0)

第一个OID是临时OID - 临时id表示尚未保存的对象。第二个id是一个永久的id,并在保存后分配给MO:

所以...

var objectID = object.objectID
if objectID.temporaryID {
    object.managedObjectContext.save() //try do catch left out
}
objectID = object.objectID
assert(objectID.temporaryID == false)