iOS核心数据对象的唯一标识符?

Posted

技术标签:

【中文标题】iOS核心数据对象的唯一标识符?【英文标题】:Unique Identifier for iOS core data object? 【发布时间】:2011-10-23 17:22:42 【问题描述】:

我有一个使用 Core Data 的 iPhone 应用程序,但我似乎无法找出特定实体的可靠唯一标识符。情况如下:

我有一个 Profile 实体,与其他实体有关系。在应用程序启动时,用户选择要“登录”的个人资料。我需要在应用程序的整个使用过程中跟踪该特定配置文件,以便获取正确的相关对象。

如果我使用的是普通的 sql 数据库,我只会将 profileID(主键)作为属性存储在 App Delegate 中。但是,在 Core Data 中,没有主键。

我知道有一个托管对象 objectID,但根据我的阅读,它可以更改(用户可以在使用应用程序时更改他们的个人资料信息,这意味着必须获取然后重新保存它)。是否有最佳做法来处理我不知道的此类情况?

【问题讨论】:

如果用户更改了他们的个人资料信息,您不应该更新现有的托管对象而不是重新保存它吗? 【参考方案1】:

用户1007895,

有一种机制可以持久化objectID-[NSManagedObjectID URIRepresentation]-[NSPersistentStoreCoordinator managedObjectIDForURIRepresentation:]。这些保证永远不会改变。

安德鲁

【讨论】:

对于想知道如何从托管对象获取此 URI 的任何人,您可以执行以下操作:object.objectID.URIRepresentation 请注意,如果相应的托管对象尚未保存,则对象 ID(以及因此的 URI)是一个临时值,将在保存相应的托管对象时更改。 => 所以上面的答案是错误的。 URIRepresentation 不保证永远不会改变,因为它会在保存对象时改变。【参考方案2】:

重新保存不会更改唯一的 objectID,除非您重新创建(= 复制)对象并保存它 - 否则唯一 ID 将毫无意义。

如果是这种情况,您始终可以拥有自己的 id 字段,您可以在第一次创建配置文件时使用 objectID 填充该字段;如果您不自己更改,该字段将永远不会更改:-)。

【讨论】:

以上是关于iOS核心数据对象的唯一标识符?的主要内容,如果未能解决你的问题,请参考以下文章

[转]iOS设备唯一标识探讨

如何在 IOS 中查找照片资产的标识符

iOS获取设备唯一标识的8种方法

iOS 设备获取唯一标识符汇总

iOS 和 Android 无需连接即可访问的蓝牙设备是不是有唯一标识符?

iOS开发:设备唯一标识与全局变量