这个MagicalRecord弃用电话的替代方法是什么?

时间:2013-12-12 05:01:17

标签: magicalrecord

如何在MagicalRecord中找到替换方法(已弃用)?我看过Google,SO和文档;似乎什么都不是替代品,当然,文档中没有任何内容可以告诉您什么取代了已弃用的方法。 : - {

[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveErrorHandler:^(NSError *error)

2 个答案:

答案 0 :(得分:23)

有问题的弃用方法是:

[NSManagedObjectContext MR_contextForCurrentThread]

我刚才写了一点关于blog post的内容,虽然我承认它是在我的个人博客上,而不是在任何官方文档中。但是,TL; DR,底线是,在GCD和队列的世界中,你不能保证队列到线程的1-1映射,尽管GCD在线程上运行。确保事情顺利进行的方法是使用以下模式:

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
    //make your changes in the localContext
}];

这解决了contextForCurrentThread中出现的细微交叉线程问题,只需强制执行您应该在线程特定上下文中的不同线程中完成所有工作的规则。通过每次保存时创建新的上下文,而不是重新使用上下文,您将保证不会跨线程,并且不会在1%的时间内使应用程序崩溃。

答案 1 :(得分:1)

casademora是正确的,但我会尝试更精确,因为我在转换时会遇到一些问题

    [[NSManagedObjectContext MR_contextForCurrentThread] MR_saveToPersistentStoreWithCompletion:nil];

进入

    [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext)

您必须小心在块内更改或创建实体,但这还不够。

要检索您的实体,您还必须在上下文中使用选择请求。

MR_findFirstByAttribute:withValue

是不够的,不会保存更新。你必须使用

MR_findFirstByAttribute:withValue:InContext:localContext

创建实体时,它是相同的

MR_createEntity

必须改为

MR_createEntityInContext:localContext

然后它就像一个魅力:)