我试图在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创建适当的背景上下文,您的数据操作时,它试图保存数据。MagicalRecord将设置开始使用Core Data所需的大部分流程。只要让它完成大部分工作,你就可以上路了。