ios – 为什么NSManagedObjectID会发生变化?

前端之家收集整理的这篇文章主要介绍了ios – 为什么NSManagedObjectID会发生变化?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我不确定这个问题的格式对这个网站是否有用.

基本上,有没有人知道什么使得Apple确保在每次将数据保存到持久存储时NSManagedObjectID发生变化的设计决策?

我可能错了,但这个决定对我来说听起来很可疑.
没有明显的优势(它是一个UUID!它是唯一的!),但是它传递了objectID – 它可以在保存对象的任何时候在你的脚下改变.

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

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

我最大的问题是为什么提供临时的managedObjectID.它有什么意义吗?只是让人们混淆试图使用它吗?

解决方法

我有点困惑为什么你一直说NSManagedObjectID特别是UUID. URI表示可能具有与UUID格式类似的外观,但我没有在文档中看到它表示“NSManagedObjectID是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:).同样,不要考虑NSManagedObjectID的URI表示;这只是一种序列化格式.真实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相关文章