假设我有一个存储在核心数据中的书籍列表。我想通过主键 ID 搜索一本书。
我知道 Core Data 创建的 sqlite 文件在每个表中都有一个 ID 列,但这似乎并没有以任何方式暴露给我。
有人有什么建议吗?
最佳答案
-[NSManagedObject objectID]
是 Core Data 中对象实例的唯一 ID。它可以通过 -[NSManagedObjectID URIRepresentation]
进行序列化。您可以使用 -[NSPersistentStoreCoordinator ManagedObjectIDForURIRepresentation:]
从持久存储协调器检索 objectID
,然后使用 -[NSManagedObjectContext objectWithID:] 从托管对象上下文获取对象: ]
。
但是
您应该记住,核心数据不是 ORM。这是一个object graph management framework 。也就是说,使用 SQLite(和唯一行 ID)作为后端纯粹是一个实现细节。您越早摆脱 SQL/RDBMS 思维模式,您就会越快对 Core Data 感到满意。不要尝试从存储的 ID 中查找对象,而是考虑为什么需要该对象以及什么对象需要它。如果 Foo
类的实例需要能够访问 Bar
类的实例,为什么不直接创建一个从 Foo
到Bar
并将相应的 Bar
实例设置为相应 Foo
实例上关联的目标。让 Core Data 跟踪对象 ID。
关于iphone - 数据库中行的 Core Data 主键 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4720182/