尝试在块内保存对象时发生崩溃。 (CoreData不能满足对...故障)

问题描述:

我试图挽救AFNetworking块内的对象,但有时也有错误崩溃:CoreData could not fulfill a fault for...尝试在块内保存对象时发生崩溃。 (CoreData不能满足对...故障)

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

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]; 
+0

尝试使用MR_saveToPersistentStoreWithCompletion并让我知道它会对您有帮助吗? –

你试图进行后台操作。 defaultContext仅适用于主线程(它没有明确的文档记录,我们正在研究它)。但是你想要做的是在一个将处理后台线程操作的上下文中执行你的保存。也就是说,你想使用一个在后台工作的NSManagedObjectContext。一般来说试试这个:

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { 

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

这将让MagicalRecord创建您的数据时,它试图将数据保存在操作正确的情况下的背景。 MagicalRecord将设置大部分所需的内容以便开始使用Core Data。让它做很多工作,你就会在路上。

+0

@casadermora感谢您的帮助!当它不在块上时,我应该继续使用'[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];'? –

+0

您只使用主线程的默认上下文。否则,请使用此块,或创建一个新的上下文并在那里执行您的工作。 – casademora