我正在使用魔法记录框架来保存用户设置。现在,我第一次想要在后台线程中保存东西。在Magical Record的github页面上是一个我不完全理解的示例片段:
Person *person = ...;
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){
Person *localPerson = [person MR_inContext:localContext];
localPerson.firstName = @"John";
localPerson.lastName = @"Appleseed";
}];
为什么需要第一行?我不能完全在块中创建Person吗?谢谢!
答案 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