我在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的正确方法吗?
提前致谢
答案 0 :(得分:0)
我知道这是一个较旧的问题,但您在创建b
后永远不会保存上下文。因此,当你打电话
[b MR_inContext:localContext]
,
它返回nil,因为b
从未持久存在。
关于正确的保存和显示方式的问题,是的,但是如果不知道你是如何设置[[DataBaseManager sharedManager] managedObjectContext]
的,那么你需要确保它知道在其他环境中所做的更改,或者通过从持久性商店刷新或通过观察NSManagedObjectContextDidSaveNotification
。
值得一提的是,既然你正在使用MagicalRecord,你应该只使用MR_defaultContext
,因为它就是它的用途!