尝试将对象保存在块内时崩溃。 (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...
当我尝试管理从持久存储中删除的对象数据时,我读到它是相关的。
我怎样才能避免这种情况?
示例:
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 将设置大部分所需的内容。只需让它完成大部分工作,您就可以上路了。
我试图在 AFNetworking 块中保存一个对象,但有时它会因错误而崩溃:CoreData could not fulfill a fault for...
当我尝试管理从持久存储中删除的对象数据时,我读到它是相关的。
我怎样才能避免这种情况?
示例:
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 将设置大部分所需的内容。只需让它完成大部分工作,您就可以上路了。