【问题标题】:Core data object id format核心数据对象id格式
【发布时间】: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 应该是相同的。

谢谢。

【问题讨论】:

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

标签: ios core-data nsmanagedobjectid


【解决方案1】:

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

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

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

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

【讨论】:

  • 好的。那么我可以假设两者不相同?我有嵌套的上下文,我希望它们是平等的,但似乎它们毕竟是不同的。简而言之,p1p2 使它们不同,因为 p{x} 是对象 ID 的一部分。
  • 它使它们在整个应用程序的所有上下文中都是独一无二的。需要有一些独特性才能知道如何应用发生在另一个上下文中的更改。由于每个 managedObject 都有其关联的上下文,因此您可以对这个 URI 进行某种程度的全局引用。否则,在不知道使用哪个 MOC 的情况下无法区分对象。
猜你喜欢
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
  • 2011-06-29
  • 2018-03-20
  • 1970-01-01
相关资源
最近更新 更多