Я разрабатываю систему резервного копирования / восстановления для моего приложения, в которой пользователь может загрузить резервную копию резервной копии основного хранилища данных (файл sqlite) и заменить используемое в настоящее время хранилище данных загруженным файлом. Однако, как только пользователь загрузит файл и заменит текущее хранилище данных, ни одна из данных не будет обновлена. Но когда приложение закрывается и перезапускается, восстановленные данные становятся доступными. Как заставить мое приложение перезагрузить файл основного хранилища данных?
Я попытался получить доступ к делегату приложения из моего UIViewController, который восстанавливает данные, например, чтобы перестроить основной стек данных и распространить его на все контроллеры представления в стеке навигации:
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];
}
Но это не работает, выдает только следующую ошибку, когда я возвращаюсь к контроллеру корневого представления: 'The NSManagedObject with ID:0x5d79060 <x-coredata://D8E73D64-C9BA-4CFA-9213-F8BD61749155/MyObject/p2> has been invalidated.'
Кто-нибудь знает, как заставить приложение перезагрузить данные и начать работу с новым файлом хранилища данных?