核心数据对象id格式

Posted

技术标签:

【中文标题】核心数据对象id格式【英文标题】:Core data object id format 【发布时间】:2018-12-13 09:59:46 【问题描述】:

我有这些通过在不同上下文中获取相同对象而获得的永久对象 ID:

<x-coredata://F1697911-CD8A-4D63-B40F-AB0CA020C873/Facility/p1><x-coredata://F1697911-CD8A-4D63-B40F-AB0CA020C873/Facility/p2>

GUID 部分 F1697911-CD8A-4D63-B40F-AB0CA020C873 相同。 实体部分是一样的。

什么是p1p2,它们为什么不同?

我的期望是它们代表的对象应该是相同的。我在不同的托管对象上下文中使用它们,但据我了解,对象 id 应该是相同的。

谢谢。

【问题讨论】:

好资源***.com/a/12218565/429763 这个字符串只是描述了控制台中某些对象的注销吗? 是的,只有控制台上的打印输出。但请注意 p1 与 p2 如果这只是因为您有兴趣了解它的工作原理,那很好。如果您正在编写(或计划编写)依赖于这种格式的代码,那么您几乎肯定会使 Core Data 变得比它需要的更复杂,或者做出了无效的假设。 【参考方案1】:

p 将 objectID 标识为持久的,与它的 MOC 相关联。它是整个 URI 的一部分。

临时 URI 看起来不同,例如: x-coredata:///Facility/tF1697911-CD8A-4D63-B40F-AB0CA020C873 注意 objectID 前面的“t”。

CoreData 的 url 方案就是这样工作的。

您有 2 个永久唯一 ID 来区分对象引用。

【讨论】:

好的。那么我可以假设两者不相同?我有嵌套的上下文,我希望它们是平等的,但似乎它们毕竟是不同的。简而言之,p1p2 使它们不同,因为 px 是对象 ID 的一部分。 它使它们在整个应用程序的所有上下文中都是独一无二的。需要有一些独特性才能知道如何应用发生在另一个上下文中的更改。由于每个 managedObject 都有其关联的上下文,因此您可以对这个 URI 进行某种程度的全局引用。否则,在不知道使用哪个 MOC 的情况下无法区分对象。

以上是关于核心数据对象id格式的主要内容,如果未能解决你的问题,请参考以下文章

仅找到一次 ID 的核心数据对象

获取核心数据中的对象id

在获取永久 ID 后,核心数据无法为对象完成故障

应用程序在其主键字段的对象 ID 的核心数据中崩溃

核心数据:我想要获取的对象中的 pk

核心数据按格式化日期排序表格视图