我该如何在MagicalRecord中找到这个废弃方法的替代方法?我已经查看了Google、SO和文档,但是似乎没有替代方法,当然,文档中也没有告诉你哪个方法替换了这个废弃的方法。 :-{
[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveErrorHandler:^(NSError *error)
我该如何在MagicalRecord中找到这个废弃方法的替代方法?我已经查看了Google、SO和文档,但是似乎没有替代方法,当然,文档中也没有告诉你哪个方法替换了这个废弃的方法。 :-{
[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveErrorHandler:^(NSError *error)
所涉及的弃用方法是:
[NSManagedObjectContext MR_contextForCurrentThread]
我之前在个人博客上写过一篇关于这个问题的博客文章,虽然我承认它并不在任何官方文档中。简单来说,在GCD和队列的世界里,尽管GCD在线程上运行,但你无法保证队列与线程之间有1-1的映射关系。为了确保事情朝着正确的方向发展,请使用以下模式:
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
//make your changes in the localContext
}];
通过在线程特定上下文中执行所有工作,强制遵守应该在不同线程中执行所有工作的规则,这解决了contextForCurrentThread
中出现的微妙跨线程问题。每次保存时创建新上下文,而不重用上下文,您将确保不会跨线程,并且不会使应用程序1%的时间崩溃。
casademora是正确的,但我会更加精确,因为在转换我的时候遇到了一些问题。
[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveToPersistentStoreWithCompletion:nil];
into
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext)
你必须小心地在块内更改或创建实体,但这还不够。
要检索你的实体,你必须使用带有上下文的选择请求。
MR_findFirstByAttribute:withValue
仅仅使用该方法是不够的,更新将无法被保存。你需要使用 代替。
MR_findFirstByAttribute:withValue:InContext:localContext
在创建实体时,情况是一样的
MR_createEntity
MR_createEntityInContext:localContext
MR_contextForCurrentThread
已被弃用。应该使用什么替代? - Gargo