【问题标题】:How can I get the value of the primary key of an NSManagedObject?如何获取 NSManagedObject 的主键值?
【发布时间】:2016-12-14 21:19:16
【问题描述】:

我发现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。但我不认为是这样,或者是吗?

【问题讨论】:

标签: ios swift sqlite core-data


【解决方案1】:

Core Data 不支持这样做,因为 Core Data 的 API 与 SQL 非常不同。如果你从 SQL 的角度来思考,你会让 Core Data 变得比它需要的困难得多。

您的代码 sn-p 的大致核心数据等效项类似于(使用 Swift 3 语法):

let objectID = myManagedObject.objectID

// Later
let myManagedObject = context.object(with: objectID)
// Or...
let myManagedObject = context.existingObject(with: objectID)

使用object(with:) 更快,但可能不太安全。使用existingObject(with:) 可能会稍微慢一些,但更安全。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多