- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我不太确定这个问题的格式是否适合这个网站。
基本上,有谁知道是什么让 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/
NSManagedObjectId 实例本身能否在线程之间安全共享?我知道我可以降低一个级别并获取它的 URIRepresentation,但如果我能避免的话,我会的。 谢谢! 最佳答案 是的,是的。
我想将 iPhone 上的核心数据与 Sinatra 服务器上的 MongoDB 同步。 当 iPhone 从 Node.js 聊天服务器收到一条消息时,该消息包含发件人的 BSON ObjectId
为避免成为 XY 问题,这里有一些背景: 我的应用程序允许用户创建和保存很多设置,有点像 Xcode 的字体和颜色选择器: 这是因为用户可以设置的东西很多。只需点击保存的设置而不是重新设置所有这些设置
我发现了这个美妙的 NSManagedObjectID。这对于引用 Entity/NSManagedObject/NSEntityDescription 非常有用,对吗? 让我们从实体获取 ID: N
我有一个名为 HomeTableViewController 的 TableViewController,它加载了来自 Core Data 数组的数据。我试图从选定的单元格中获取对象 ID,如下所示:
我有一个弱属性: @property (nonatomic,weak) NSManagedObjectID *locatedMessageID; 调用 -(void)setLocatedMessage
我不太确定这个问题的格式是否适合这个网站。 基本上,有谁知道是什么让 Apple 做出这样的设计决定,即每当您将数据保存到持久存储时 NSManagedObjectID 都会发生变化? 我可能是错的,
我有一个核心数据实体需要保留一些其他实体的 NSManagedObjectID。为此,我正在考虑将 ObjectID 转换为字符串,该字符串是 NSManagedObject 属性的批准类型。 我可以
在我的应用程序中,我将 Core Data 与不使用 Core Data 的附加 sqlite 数据库一起使用。在这个额外的数据库中,我有一些列通过每个实例的 NSManagedObjectID 存储
我在处理 CoreData 中的对象 ID 时遇到问题。为方便起见,我使用 MagicalRecord 并具有 3 个上下文:私有(private)队列工作上下文、UI 的主队列上下文和工作上下文的父
目前,我通过以下代码执行多个更新操作。 func updateOrders(_ updates : [(objectID: NSManagedObjectID, order: Int64)]) {
我保存了我的托管对象。但是我的NSManagedObjectID保存后还是临时的。为什么? dispatch_async(privateQueue, ^{ __block NSMutableA
代码如下: - (void)willTurnIntoFault { NSManagedObject *relatedObject = self.relatedObject; if (r
我有一个 NSManagedObjectID 数组。有没有比遍历数组并单独获取它们更有效的方法来获取关联的托管对象? 最佳答案 使用以下谓词执行fetchRequest NSPredicate *pr
我真的很想避免使用 NSManagedObjectID作为将我的模型结构连接到它们的 CoreData 对象的一种方式。我的意思是这样的: 假设我有一个 Book CoreData 中的实体,然后我有
我正在开发一个使用 CoreData 的应用程序。出于我的应用程序的目的,我想保存一个对象的 managedObjectId(在 plist 文件中),以便在下次应用程序启动时检索该对象。 经过一些研
我看到了这个答案,这确实是我需要的(Does a Core Data NSSet contain an object with a certain ID?),但是其中使用的 ID 是用户自定义的 ID
我在 UICollectionviewController 中显示了一个数据集,我使用 [fetchedResultsController objectAtIndexPath:indexPath] 访
我有一个 xcdatamodel,其中包含一组内置于静态库中的实体。 我将这个静态库包含在一个项目中。我想在主项目中创建另一个模型,实体名为 Task。我想在实体中有一个属性,我可以在其中存储在静态库
我正在编写一个连接到数据库以获取数据的应用程序。由于获取成本高昂且数据通常不会改变,因此我使用 CoreData 来缓存结果,以便可以进行快速的本地查询。 从数据库中,对于每种类型,都有一个保证唯一的
我是一名优秀的程序员,十分优秀!