似乎我尝试了一切,但它似乎只在主线程中工作。例如:
[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
。
那么在后台线程中调用保存是不可能的吗?
答案 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];
}];
答案 1 :(得分:0)
最后,我没有用完全背景的MagicalRecord工作来创建一个可行的项目。
对我来说,最好的解决方案是仅在主线程中更新数据库,并在任何线程(包括后台)中读取数据库。另外,我显示了有关数据库更新的自定义进度视图。