Dziwne zachowanie podczas używania potomnego / macierzystego NSManagedObjectContext

Zajmuję się tworzeniem aplikacji, w której muszę zarówno obliczać rzeczy (operacje wielokrotne), jak i zapisywać rzeczy (synchronizować dane z serwerem) na wątku w tle.

Z tego powodu używam dwóch NSManagedObjectContexts (MOC), dziecka i rodzica, które muszą być zawsze zsynchronizowane. Aby upewnić się, że są one zsynchronizowane, zawsze edytuję / dodaję dane do potomnego MOC, tak że są one przesyłane do głównego MOC z następującym wzorem:

[childMOC performBlock:^{

    MyObject *myObject = *create new object in childMOC*

    [childMOC save:&error];

    [mainMOC performBlock:^{
        [mainMOC save:&error];
        // Is this mandatory to make it work correctly?
        // [childMOC performBlock:^{
        //     [childMOC refreshObject:myObject mergeChanges:NO];
        // }];
    }];
}];

Po jakimś czasie wydawało mi się, że mam dwie wersje tego samego obiektu w kontekście tła, jedną z identyfikatorem tymczasowym i jedną ze stałym identyfikatorem. Jeśli np. dodałem obiekty podrzędne do „prawdziwego” obiektu (przekazując świeży identyfikator stały z głównego do podrzędnego MOC) Nie widziałem tych obiektów, gdy odzyskałem mój obiekt w tle MOC, ponieważ jest to stary tymczasowy, który jest buforowany.

Widziałem powyższy wzór, który był często używany, ale wydaje się dziwne, że nikt nie wspomniał o tym tymczasowym / stałym problemie z identyfikatorem.

Nie ma racji, że mogą to być dwie wersje tego samego obiektu w kontekście. Jeśli przekazuję identyfikator NSManagedObjectID dziecięcemu MOC i pobieram go, to czy MOC dziecka nie powinien aktualizować mojego istniejącego obiektu zamiast tworzyć nowy i pozostawić mój stary tymczasowy jako domyślny buforowany?

Czy muszę używać skomentowanego wiersza w każdym miejscu, w którym tworzę obiekt?

A może działa z mergeChangesFromContextDidSaveNotification, czy da to taki sam efekt?

questionAnswers(2)

yourAnswerToTheQuestion