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核心数据对象的唯一标识符?的主要内容,如果未能解决你的问题,请参考以下文章