我已经看到了两种不同的做法,我想知道哪种方法是正确的。
具体来说,我正在谈论访问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
是否做了一些神奇的事情来解决这个问题?
答案 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;
}
因此两者都是在不同上下文中访问对象的有效方法,
一个使用existingObjectWithID
,另一个objectWithID
。
对于这些之间的细微差别,请参阅文档或What's the difference between -existingObjectWithID:error: and –objectWithID:?