魔法记录保存在背景中

时间:2013-01-22 13:08:58

标签: ios xcode multithreading core-data magicalrecord

我正在使用魔法记录框架来保存用户设置。现在,我第一次想要在后台线程中保存东西。在Magical Record的github页面上是一个我不完全理解的示例片段:

Person *person = ...;
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){

    Person *localPerson = [person MR_inContext:localContext];

    localPerson.firstName = @"John";
    localPerson.lastName = @"Appleseed";

}];

为什么需要第一行?我不能完全在块中创建Person吗?谢谢!

3 个答案:

答案 0 :(得分:12)

当然可以。这个例子只是从外部上下文中获取person对象(您的默认值或其他),并在localContext中为您指向它,以便您可以在后台更新它。如果您要从头开始创建person,可以执行以下操作:

[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){

    Person *localPerson = [Person MR_createInContext:localContext];

    localPerson.firstName = @"John";
    localPerson.lastName = @"Appleseed";

}];

你已经完成了。

PS。请注意,MR_createInContext:是在Person类上调用的类方法(而不是在MR_inContext:实例上调用的person实例方法)。

答案 1 :(得分:1)

是的,您也可以在块中创建Person。仅当您从不同的上下文中获取一个Person时,才需要inContext:方法。 请注意,如果在块中创建Person,则应使用createInContext:方法。

答案 2 :(得分:0)

魔法记录保存和提取是基于上下文的。因此,您可以使用MR_createInContext方法在默认上下文中创建记录,也可以在新上下文中创建记录。但是,在获取记录时,上下文应与您创建的相同。

http://pthiaga.blogspot.in/2014/11/running-database-fetch-core-data-in.html