MagicalRecord不能在后台线程中工作吗?

时间:2014-08-24 13:54:15

标签: ios multithreading thread-safety magicalrecord background-thread

似乎我尝试了一切,但它似乎只在主线程中工作。例如:

[SomeClass MR_createEntity];
[[NSManagedObjectContext MR_defaultContext] MR_saveWithOptions:MRSaveSynchronously completion:^(BOOL success, NSError *error) {

        if (success) {
            NSLog(@"You successfully saved your context.");
        } else if (error) {
            NSLog(@"Error saving context: %@", error.description);
        }
    }];

如果此代码在主线程中运行,那么success == YES否则(在后台线程中)它会给出success == NO。在这两种情况下error == nil

那么在后台线程中调用保存是不可能的吗?

2 个答案:

答案 0 :(得分:1)

总是从主线程调用完成块,这是一个应该起作用的例子:

Person *person = ...;

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext){

  Person *localPerson = [person MR_inContext:localContext];
  localPerson.firstName = @"John";
  localPerson.lastName = @"Appleseed";

} completion:^(BOOL success, NSError *error) {

  self.everyoneInTheDepartment = [Person findAll];

}];

参考:https://github.com/magicalpanda/MagicalRecord/blob/master/Docs/Working-with-Managed-Object-Contexts.md

答案 1 :(得分:0)

最后,我没有用完全背景的MagicalRecord工作来创建一个可行的项目。

对我来说,最好的解决方案是仅在主线程中更新数据库,并在任何线程(包括后台)中读取数据库。另外,我显示了有关数据库更新的自定义进度视图。