gpt4 book ai didi

ios - 为什么 NSManagedObjectID 会改变?

转载 作者:可可西里 更新时间:2023-11-01 03:06:41 27 4
gpt4 key购买 nike

我不太确定这个问题的格式是否适合这个网站。

基本上,有谁知道是什么让 Apple 做出这样的设计决定,即每当您将数据保存到持久存储时 NSManagedObjectID 都会发生变化?

我可能是错的,但这个决定对我来说听起来很可疑。没有明显的优势(它是一个 UUID!它唯一的!),但它使传递 objectID 的 --- 它可以在保存对象时随时在您的脚下改变。

这对我来说是个大问题,因为我使用三个 MOC 系统(后台 MOC -> UI MOC -> 持久性 MOC),对象被插入后台 MOC 并通过保存向上传播。保存是异步的,因为它必须在三个不同的 MOC 上传播并在对象创建后返回对象,但在将它们保存到持久存储之前非常痛苦,因为我不能依赖传递 objectID。

我做错了什么吗?有谁知道 UUID 在没有通知的情况下随时可变的优势是什么?

我最大的问题是为什么要提供临时的 managedObjectID。这有什么意义吗?是否只是为了迷惑人们尝试使用它?

最佳答案

我有点不明白为什么你一直说 NSManagedObjectID 是一个 UUID。 URI 表示形式可能与 UUID 格式具有相似的外观,但我在文档中的任何地方都看不到它说“a NSManagedObjectID is a UUID”(正如我将在下面讨论的那样,不止于此)。为什么 Apple 以这种方式设计它超出了 StackOverflow 的范围,所以希望你的问题真的是“Core Data 的设计是什么,我如何使用它?”

文档(在 Managed Object IDs and URIs 中)说的是,如果您想进行这种对象跟踪,您应该添加自己的 UUID 作为属性:

You can sometimes benefit from creating your own unique ID (UUID) property which can be defined and set for newly inserted objects. This allows you to efficiently locate specific objects using predicates (though before a save operation new objects can be found only in their original context).

NSManagedObjectID改变的原因可以从不可变的数据结构中看出。它包含一个 persistentStore 属性。这在您实际保存对象之前无法确定(例如,您可以调用 assignObject:toPersistentStore:)。同样,不要根据其 URI 表示来考虑 NSManagedObjectID;那只是一种序列化格式。真实 ID 包括持久存储,如文档中所示:

Like the primary key in the database, an identifier contains the information needed to exactly describe an object in a persistent store, although the detailed information is not exposed.

在插入对象之前,该标识符无法最终确定。

关于ios - 为什么 NSManagedObjectID 会改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17100137/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com