【问题标题】:Nested NSManagedObjectContext save and objectID嵌套 NSManagedObjectContext 保存和 objectID
【发布时间】:2012-08-06 02:33:30
【问题描述】:

childContext 和 parentContext 都是“NSMainQueueConcurrencyType”

[childContext performBlock:^(void) {
  [childContext save:NULL];

  [parentContext performBlock:^(void) {
    [parentContext save:NULL];
    // Why is objectID for the inserted NSManagedObject still a temporary one here?
  }];
}];

问题:

  1. 这是保存子上下文和父上下文的正确方法吗
  2. 为什么保存后插入的NSManagedObject的objectID还是临时的?

【问题讨论】:

    标签: objective-c ios5 core-data


    【解决方案1】:

    我可以想到一些罕见的情况,您希望拥有一个主队列 MOC 作为另一个主队列 MOC 的子队列,但看到这一点肯定会问我:让他们两个都有什么好处NSMainQueueConcurrencyType?

    此外,这是一个已知的错误(至少已多次报告)。当您从子上下文插入和保存时,只有直接连接到持久存储的那个才会改变其 ID。因此,在保存新插入的项目时,您有多种选择。

    1. 在保存之前获取永久 ID。
    2. 调用[moc refreshObject:object mergeChanges:NO] 并将所有引用设置为零。
    3. 在大多数父级保存后获取永久 ID

    我更喜欢#3,因为它需要深入了解数据库。如果你之后做,它可以从父母那里得到它们。

    【讨论】:

    • 回答您回答中的问题:创建一个子 MOC 作为一系列更改的“暂存区”,允许自动保存或拒绝它们。 (换句话说,如果用户点击取消按钮,你只是丢弃 MOC 而不保存它。)
    猜你喜欢
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2021-03-23
    • 2021-01-06
    • 2012-02-20
    相关资源
    最近更新 更多