如何获取NSManagedObject的主键值?

时间:2016-08-09 00:37:49

标签: ios swift sqlite core-data

我发现Core Data基本上是一个SQLite数据库。每个实体都是一个单独的表。还有一些表不是实体,包括Z_METADATAZ_MODELCACHEZ_PRIMARYKEY。我不知道他们做了什么。

无论如何,我看到了"实体表的字段"与我在数据模型中添加的属性大致相同,加上一些额外内容。例如,如果我的实体只有一个名为date的属性。该表格将包含ZDATE字段以及Z_PKZ_ENTZ_OPT

显然,每个实体都有一个存储在Z_PK字段中的主键!我想获取特定NSManagedObject的此主键的值。我想在数据库中查询具有特定主键的NSManagedObject

所以基本上是这样的:

let pk = myManagedObject.primaryKey
// the below should return myManagedObject
managedObjContext.objectWithPrimaryKey(someEntityDescription, pk)

我在NSManagedObject的文档中搜索了objectID。但我不认为这是它,或者是它?

1 个答案:

答案 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:)可能会稍慢但更安全。