2

これを行う2つの異なる方法を見てきましたが、どちらが正しいか知りたいです。

具体的にはManagedObject、BG スレッドで にアクセスすることについて話しています。

私が見た方法は...

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たので、これを回避するために魔法の何かがあったかどうかはわかりませんでした?

4

1 に答える 1

2

inContext:は Magical Record の「短縮形」で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を参照)。

したがって、どちらも異なるコンテキストでオブジェクトにアクセスするための有効な方法です。一方は usingexistingObjectWithIDで、もう一方はobjectWithIDです。これらの微妙な違いについては、ドキュメントを参照するか、たとえばWhat's the difference between -existingObjectWithID:error: and –objectWithID:? を参照してください。.

于 2013-03-11T13:58:03.743 に答える