我正在使用实体的对象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的原因。
答案 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)