尝试将对象保存在块内时崩溃。 (CoreData 无法为...履行错误)

Crash when try to save an object inside a block. (CoreData could not fulfill a fault for...)

我试图在 AFNetworking 块中保存一个对象,但有时它会因错误而崩溃:CoreData could not fulfill a fault for...

当我尝试管理从持久存储中删除的对象数据时,我读到它是相关的。

(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdTroubleshooting.html)

我怎样才能避免这种情况?


示例:

Line *line = [Line MR_createEntity];
[line setSync:@(SYNC_PROCESSING)];

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://test.com/request" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

    // CRASH
    [line setSync:@(SYNC_SUCCESS)];
    [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];

} failure:nil];

您正在尝试执行后台操作。 defaultContext 仅用于主线程(它没有明确记录,我们正在努力)。但是您要做的是在将为您处理后台线程操作的上下文中执行保存。也就是说,您想使用在后台运行的 NSManagedObjectContext。一般来说,试试这个:

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {

    id myObject = [line MR_inContext:localContext];
    [myObject setSync:@(value)];
}];

这将使 MagicalRecord 为您的数据创建适当的背景上下文,以便在它尝试保存数据时对其进行操作。为了开始使用 Core Data,MagicalRecord 将设置大部分所需的内容。只需让它完成大部分工作,您就可以上路了。