Opracowuję system kopii zapasowych/przywracania dla mojej aplikacji, w którym użytkownik może pobrać kopię zapasową podstawowej składnicy danych (plik sqlite) i zastąpić aktualnie używany magazyn danych z pobranym plikiem. Jednak gdy użytkownik pobierze plik i zastąpi bieżącą składnicę danych, żadne dane nie wydają się być aktualizowane. Ale gdy aplikacja zostanie ponownie uruchomiona, przywrócone dane są dostępne. Jak zmusić moją aplikację do ponownego załadowania pliku głównego magazynu danych?Zastępowanie pliku sqlite Core Data podczas pracy aplikacji, dane nie są aktualizowane
Próbowałem uzyskać dostęp do aplikacji delegata z moim UIViewController, który odtwarza dane, jak tak, aby odbudować stosu danych rdzenia i propogate go we wszystkich kontrolerów widoku w stosie nawigacja:
MyAppDelegate *app = [[UIApplication sharedApplication] delegate];
app.managedObjectContext = nil;
app.persistentStoreCoordinator = nil;
app.managedObjectModel = nil;
managedObjectContext = [app managedObjectContext];
NSArray *controllers = [self.navigationController viewControllers];
UIViewController *c;
for (int i = 0; i < [controllers count]; i++) {
c = [controllers objectAtIndex:i];
[c setManagedObjectContext:managedObjectContext];
}
Ale to nie działa, generuje tylko następujący błąd po powrocie do kontrolera widoku root: 'The NSManagedObject with ID:0x5d79060 <x-coredata://D8E73D64-C9BA-4CFA-9213-F8BD61749155/MyObject/p2> has been invalidated.'
Czy ktoś wie, jak zmusić aplikację do ponownego załadowania danych i rozpoczęcia pracy z nowym plikiem składnicy danych?
Dzięki za odpowiedź. Działa to świetnie. Czy wiesz, jak radzić sobie z wersjami w tej sytuacji? Próbowałem zastąpić plik sqlite starszą wersją i daje mi błąd "Can not find model for source store". –
Musisz jawnie zmienić swój model pliku. Xcode ma na to narzędzia - poszukaj opcji dodania wersji modelu do istniejącego 'xcdatamodel'. – Tim