6

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

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

    Person *localPerson = [person MR_inContext:localContext];

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

}];

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

4

3 回答 3

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)。

于 2013-01-22T13:17:21.303 回答
1

是的,您也可以在块中创建 Person。inContext: 方法仅在您从不同的上下文中获取例如 Person 时才是必需的。请注意,如果您在块中创建 Person,那么您应该使用 createInContext: 方法。

于 2013-01-22T13:17:16.180 回答
0

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

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

于 2014-11-19T05:49:13.953 回答