正确使用MagicalRecord保存在BG中

时间:2013-03-11 13:28:22

标签: iphone ios objective-c core-data magicalrecord

我已经看到了两种不同的做法,我想知道哪种方法是正确的。

具体来说,我正在谈论访问BG线程上的ManagedObject

我见过的方法是......

Person *person = ...
[MagicalRecord saveUsingBlock:^(NSManagedObjectContext *localContext) {
    Person *localPerson = [person inContext:localContext];
    // do stuff...
}]

但我也见过......

Person *person = ...
NSManagedObjectID *objectID = person.objectID;
[MagicalRecord saveUsingBlock:^(NSManagedObjectContext *localContext) {
    Person *localPerson = (Person*)[localContext objectWithID:objectID];
    // do stuff...
}]

后者似乎更正确,因为您没有尝试跨线程访问对象。但是看到这两个我不确定MagicalRecord是否做了一些神奇的事情来解决这个问题?

1 个答案:

答案 0 :(得分:2)

inContext:MR_inContext:的魔术记录“速记”,实现为

- (id) MR_inContext:(NSManagedObjectContext *)otherContext
{
    NSError *error = nil;
    NSManagedObject *inContext = [otherContext existingObjectWithID:[self objectID] error:&error];
    [MagicalRecord handleErrors:error];

    return inContext;
}

(见https://github.com/magicalpanda/MagicalRecord/blob/master/MagicalRecord/Categories/NSManagedObject/NSManagedObject%2BMagicalRecord.m)。

因此两者都是在不同上下文中访问对象的有效方法, 一个使用existingObjectWithID,另一个objectWithID。 对于这些之间的细微差别,请参阅文档或What's the difference between -existingObjectWithID:error: and –objectWithID:?