我发现Core Data基本上是一个SQLite数据库。每个实体都是一个单独的表。还有一些表不是实体,包括Z_METADATA
,Z_MODELCACHE
和Z_PRIMARYKEY
。我不知道他们做了什么。
无论如何,我看到了"实体表的字段"与我在数据模型中添加的属性大致相同,加上一些额外内容。例如,如果我的实体只有一个名为date
的属性。该表格将包含ZDATE
字段以及Z_PK
,Z_ENT
和Z_OPT
。
显然,每个实体都有一个存储在Z_PK
字段中的主键!我想获取特定NSManagedObject
的此主键的值。我想在数据库中查询具有特定主键的NSManagedObject
。
所以基本上是这样的:
let pk = myManagedObject.primaryKey
// the below should return myManagedObject
managedObjContext.objectWithPrimaryKey(someEntityDescription, pk)
我在NSManagedObject
的文档中搜索了objectID
。但我不认为这是它,或者是它?
答案 0 :(得分:1)
Core Data不支持这样做,因为Core Data的API与SQL非常不同。如果你从SQL的角度思考,那么你将使核心数据变得比它需要的更加困难。
您的代码片段的近似核心数据等价物(使用Swift 3语法):
let objectID = myManagedObject.objectID
// Later
let myManagedObject = context.object(with: objectID)
// Or...
let myManagedObject = context.existingObject(with: objectID)
使用object(with:)
速度更快,但安全性可能更低。使用existingObject(with:)
可能会稍慢但更安全。