В документации Apple говорится, что нам необходимо зарегистрироваться в NSUbiquityIdentityDidChangeNotification
и сравнить текущий токен iCloud с ранее сохраненным в NSUserDefaults
, чтобы определить, отключил ли пользователь iCloud в Настройки документов и данных или переключился на другую учетную запись iCloud.
Я использую стандартный UIManagedDocument
и ориентируюсь на iOS 7, поэтому CoreData автоматически обрабатывает резервное хранилище.
Я не понимаю, что мне делать после того, как я обнаружил, что пользователь включил/отключил iCloud или переключился на другую учетную запись. Должен ли я перенести постоянное хранилище? Или я должен перенести его после NSPersistentStoreCoordinatorStoresDidChangeNotification
? Или я никогда не должен переносить его, потому что все обрабатывается CoreData?
После просмотра видео WWDC 2013 207 несколько раз я подумал, что Core Data обработает это автоматически, но обнаружил, что если я начну с поддержки iCloud, а затем отключу ее в настройках документа и данных и вставлю новые данные, то переключусь обратно iCloud включен, я получаю два разных набора данных.
Я бы хотел, чтобы, если я обнаружу, что пользователь отключил iCloud, локальная база данных должна содержать до последнего изменения, сделанного до тех пор, пока iCloud не будет включен, и только с этого момента все должно прекратить синхронизацию, пока iCloud снова не будет включен.
В видео WWDC 2013 207 в демо Melissa я также заметил вызов метода [self migrateBack]
после NSPersistentStoreCoordinatorStoresDidChangeNotification
, и это меня смущает, потому что слайды просто показывают, что мы должны сохранить наш контекст здесь и обновить пользовательский интерфейс, они не показывают, что мы должны перенести что-либо:
**Account Changes Now**
NSPersistentStoreCoordinatorStoresWillChangeNotification
[NSManagedObjectContext save:]
[NSManagedObjectContext reset:]
NSPersistentStoreCoordinatorStoresDidChangeNotification
[NSManagedObjectContext save:]