【问题标题】:Coredata/MagicalRecord, background saving and updating UICoredata/MagicalRecord,后台保存和更新UI
【发布时间】:2014-09-12 05:20:25
【问题描述】:

我在一个 iOS 项目中使用 Coredata 和 MagicalRecord,但我无法弄清楚一些保存问题。 我有一个 ManagedObjectContext 将我的对象保存在内存中以显示一些信息。 当我想创建一个新实体时,我使用以下方法在后台上下文中创建它:

__block B *b = [B MR_createInContext:[[DataBaseManager sharedManager] managedObjectContext]];
[a setB:b];
__block A *aInLocalContext;
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
    B *bInLocalContext = (B *)[b MR_inContext:localContext];
    aInLocalContext = (A *)[a MR_inContext:localContext];
    [aInLocalContext setB: bInLocalContext];
} completion:^(BOOL success, NSError *error) {}];

b是在我的显示上下文中创建的,但是bInLocalContext在backgroundContext(即localContext)中是nil,所以我的数据没有持久化,关系也没有设置。在后台上下文中创建和保存新的 NSManagedObjectContext 并将数据保留在显示上下文中以更新 UI 是否正确?

提前致谢

【问题讨论】:

    标签: ios multithreading core-data nsmanagedobjectcontext magicalrecord


    【解决方案1】:

    我知道这是一个较老的问题,但您在创建 b 后永远不会保存上下文。因此,当你调用

    [b MR_inContext:localContext],

    它返回 nil,因为 b 从未被持久化。

    关于您关于正确保存和显示方式的问题,是的,这会起作用,但不知道您是如何设置[[DataBaseManager sharedManager] managedObjectContext],您需要确保它知道在其他上下文中所做的更改,或者通过刷新从持久存储或通过观察NSManagedObjectContextDidSaveNotification

    值得一提的是,既然您使用的是 MagicalRecord,您可能应该只使用 MR_defaultContext,因为这就是它的用途!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 2014-07-09
      相关资源
      最近更新 更多