尝试在块中保存对象时崩溃。 (CoreData 无法满足...的错误)
Posted
技术标签:
【中文标题】尝试在块中保存对象时崩溃。 (CoreData 无法满足...的错误)【英文标题】:Crash when try to save an object inside a block. (CoreData could not fulfill a fault for...) 【发布时间】:2015-08-13 19:53:12 【问题描述】:我试图在 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];
【问题讨论】:
尝试使用 MR_saveToPersistentStoreWithCompletion 并告诉我它对您有帮助吗? 【参考方案1】:您正在尝试执行后台操作。 defaultContext 仅用于主线程(没有明确记录,我们正在努力)。但是您要做的是在将为您处理后台线程操作的上下文中执行保存。也就是说,您想使用在后台工作的 NSManagedObjectContext。一般试试这个:
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext)
id myObject = [line MR_inContext:localContext];
[myObject setSync:@(value)];
];
这将使 MagicalRecord 在尝试保存数据时为您的数据创建适当的背景上下文以进行操作。 MagicalRecord 将设置开始使用 Core Data 所需的大部分内容。让它完成大部分工作,您就可以上路了。
【讨论】:
@casadermora 感谢您的帮助!当它不在块上时,我应该继续使用[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
吗?
您只在主线程上使用默认上下文。否则,使用这个块,或者创建一个新的上下文并在那里执行你的工作。以上是关于尝试在块中保存对象时崩溃。 (CoreData 无法满足...的错误)的主要内容,如果未能解决你的问题,请参考以下文章