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?