当我在lldb中成为核心数据对象时,x-coredata路径意味着什么?

kro*_*oss 7 core-data objective-c ios

当我在lldb中打印核心数据对象的对象描述时,我有时会得到以下对象描述:

(lldb)po my_challenge_object(entity:Challenge; id:0x170433460 < x-coredata:/// Challenge/t52BD558C-A8FE-4064-A8BE-217A837521E52 >; data:{...})

如果我以后打印相同的对象,我有时会看到'x-coredata'路径发生变化.

(entity:Challenge; id:0x170433460 < x-coredata:// 50232AB5-7372-4628-9F00-51BDB1A5C96D/Challenge/t52BD558C-A8FE-4064-A8BE-217A837521E52 >; data:{...})

我的问题是,这条路是什么意思,为什么会改变?在这种情况下,添加'50232AB5-7372-4628-9F00-51BDB1A5C96D'会告诉我有关我的对象的内容是什么?

ImH*_*its 13

首次打印对象时,它尚未分配给持久性存储:

(lldb) po my_challenge_object
<Challenge: 0x1700da1d0> (entity: Challenge; id: 0x170433460 <x-coredata:///Challenge/t52BD558C-A8FE-4064-A8BE-217A837521E52> ; data: {...})
Run Code Online (Sandbox Code Playgroud)

这就是托管对象ID中冒号后面有三个斜杠的原因.

在第二个实例中,它已被分配给具有标识符"50232AB5-7372-4628-9F00-51BDB1A5C96D"的持久存储.

<Challenge: 0x1700da1d0> (entity: Challenge; id: 0x170433460 <**x-coredata://50232AB5-7372-4628-9F00-51BDB1A5C96D/Challenge/t52BD558C-A8FE-4064-A8BE-217A837521E52**> ; data: {...})
Run Code Online (Sandbox Code Playgroud)

托管对象ID URI的结构通常如下:

x-coredata:// [存储UUID]/[实体名称]/[主键]

注意: [Primary Key]部分是特定于商店的,可以引用sqlite行的pk或XML或Binary存储中的某个其他标识符.

商店的UUID可以从商店的元数据字典中获得,或者通过询问NSPersistentStore的实例来获取其标识符:

NSLog(@"Store Identifier: %@", [store identifier]);
Run Code Online (Sandbox Code Playgroud)