如何获取 Core Data 实体中一行的 ID,以便以后可以引用它?
Posted
技术标签:
【中文标题】如何获取 Core Data 实体中一行的 ID,以便以后可以引用它?【英文标题】:How do you get the ID of a row in a Core Data entity, such that you can reference it later? 【发布时间】:2014-04-15 08:14:44 【问题描述】:小问题!
使用 Ruby on Rails(我很欣赏与“真实”数据库的对话),对于我添加到表中的每条记录,我都可以提取该记录的 ID,将其发送到某个地方,对其进行处理,然后返回数据可以与原始记录相关联。
我(终其一生)似乎无法在 Core Data 中找到方法。
如果我有一个带有多行消息的消息实体。我希望能够提取消息的 ID(行 ID?),并将其发送到我的服务器,并通过查找它的 ID 来更改相同的记录。
我能得到的最接近的是[message objectID]
。但是,我不知道这真正返回了什么,而且我似乎无法在 JSON 请求中对其进行编码。
叹息。
任何帮助将不胜感激,因为我真的不知道从哪里开始。
编辑:
查看其他网站,最后深入了解,我决定使用自己的唯一 ID。 Apple 可以更改 URIRepresentation 的结构,如果更改核心数据的结构,objectID 也可以更改。所以,最好坚持我所知道的。
【问题讨论】:
objectID 是 CoreData 中对象的唯一 ID 【参考方案1】:objectID 是 CoreData 中对象的唯一 ID。引自苹果
NSManagedObjectID 对象是一个紧凑的通用标识符 托管对象。这构成了核心数据中唯一性的基础 框架。一个托管对象 ID 唯一标识同一个托管对象 单个应用程序中托管对象上下文之间的对象, 在多个应用程序中(如在分布式系统中)。身份标识 包含准确描述对象所需的信息 持久存储(就像数据库中的主键),虽然 详细信息不公开。框架完全 封装“外部”信息并呈现干净的对象 面向界面。
您可以考虑阅读文档here 和here
您可以获得一个 URIRepresentation,它可能会帮助您处理 JSON 表示。
【讨论】:
只要对象被持久化,您就可以使用 objectID 作为唯一标识符。 ID 可能会在对象被创建后不久发生变化,但它仍然是瞬态的。 我的问题可能表述得不够好。我一遍又一遍地阅读文档......但无济于事。但是,我正在处理此案,并将继续尝试。我知道 objectID 是一种方法……但不能以 JSON 形式对信息进行编码。不过感谢您的评论。 为什么不能使用 objectID 或 URIRepresentation ?也许你会详细说明为什么这两个对你不起作用。 显然,根据其他许多博客,Apple 有权随时更改URIRepresentation
(但仍保持以前的版本)。如果您迁移或更改实体的结构等,ObjectID 可能会发生变化,这意味着不值得付出努力或冒险。我遵循了其他建议,并创建了自己的唯一 ID,并将对其进行搜索。当我改变结构时,它们不会破坏东西(我希望!)。【参考方案2】:
查看其他网站,最后深入了解,我决定使用自己的唯一 ID。 Apple 可以更改 URIRepresentation 的结构,如果更改核心数据的结构,objectID 也可以更改。所以,最好坚持我所知道的。
【讨论】:
以上是关于如何获取 Core Data 实体中一行的 ID,以便以后可以引用它?的主要内容,如果未能解决你的问题,请参考以下文章
IOS/objective-c/core-data:如何从相关实体获取属性
如何在 Swift 中使用 UISearchBar 和 NSFetchedResultsController 在 Core Data 上一次获取多个实体?