Mam dwie instancje NSManagedObjectContext
: jedna jest używana w głównym wątku, a druga jest używana w wątku tła (przez NSOperation
.) W przypadku bezpieczeństwa wątków, te dwa konteksty mają tylko NSPersistentStoreCoordinator
.Kopiowanie oczekujących zmian między NSManagedObjectContexts z udostępnionym magazynem trwałym?
Problem polegający na tym, że oczekujące zmiany w pierwszym kontekście (w wątku głównym) nie są dostępne dla drugiego kontekstu, dopóki nie zostanie przeprowadzona -save
. Jest to zrozumiałe, ponieważ współużytkowany magazyn trwały nie będzie miał kopii plików NSManagedObjects
śledzonych przez -insertedObjects
, -updatedObjects
i .
Niestety, stanowi to problem z doświadczeniem użytkownika: wszelkie niezapisane zmiany nie pojawią się w (czasochłonnych) raportach wygenerowanych w wątku tła.
Jedyne rozwiązanie, jakie mogę sobie wyobrazić, to paskudne: weź wstawione, zaktualizowane i usunięte obiekty z pierwszego kontekstu i przeszczep je na wykres obiektu drugiego kontekstu. W zbiorze danych są dość złożone relacje, więc nie chcę iść w tym kierunku. Mam nadzieję, że ktoś tutaj będzie lepszym rozwiązaniem.
Dzięki Wil! Chciałbym skierować 10.6, choć robi się to coraz trudniej każdego dnia :-) - Śledzę już powiadomienie o zmianie, ale nie jestem pewien, jak ponownie zastosować zmiany i zachować relacje encji. Czy możesz być trochę bardziej konkretny? – chockenberry
Ah tak. W niewidzialny sposób opierałem się na moim modelu, który polega na tym, że każdy obiekt ma klucz UUID (ciąg znaków), który sam utrzymywałeś. –
Bez zapisania w tle MOC wstawki nie będą widoczne dla głównego MOC (bez zagnieżdżonych MOC). Aktualizacje/usunięcia dla istniejących obiektów powinny działać, jeśli wysłuchasz powiadomienia o zmianie (wydanego po processPendingChanges) i zaktualizujesz obiekty samodzielnie. – diederikh