Coredata / MagicalRecord,后台保存和更新UI

时间:2014-07-21 16:05:20

标签: ios multithreading core-data nsmanagedobjectcontext magicalrecord

我在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中是nil(即localContext),因此我的数据不会保留,并且没有设置关系。它是在后台上下文中创建和保存新NSManagedObjectContext并将数据保留在显示上下文中以便更新UI的正确方法吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

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

[b MR_inContext:localContext]

它返回nil,因为b从未持久存在。

关于正确的保存和显示方式的问题,是的,但是如果不知道你是如何设置[[DataBaseManager sharedManager] managedObjectContext]的,那么你需要确保它知道在其他环境中所做的更改,或者通过从持久性商店刷新或通过观察NSManagedObjectContextDidSaveNotification

值得一提的是,既然你正在使用MagicalRecord,你应该只使用MR_defaultContext,因为它就是它的用途!