У меня есть приложение с одним хранилищем Core Data. Это похоже на то, что Apple называет приложением «обувная коробка».
Есть много записей, которые уже сохранены. Мне удалось легко добавить необходимый код для настройки интеграции с iCloud.
Я создаю новое приложение на своем iPod touch и iPad, оба работают под управлением iOS5.
iPod имеет существующие данные. Однако данные не отображаются на iPad.
В приложении включен общий доступ к файлам iTunes, поэтому через iTunes я сбрасываю базу данных sqlite на обоих устройствах.
Теперь я пытаюсь внести изменения и посмотреть, будет ли iCloud теперь синхронизировать их. Это не так.
Как вы получаете существующие данные на обоих устройствах, а затем iCloud поддерживает их синхронизацию с этого момента.
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *cloudURL = [fileManager URLForUbiquityContainerIdentifier:@"ABCD1234.com.yourcompany.appID"];
NSDictionary *options = nil;
if (nil != cloudURL) {
NSString *coreDataCloudContent = [[cloudURL path] stringByAppendingPathComponent:@"data"];
cloudURL = [NSURL fileURLWithPath:coreDataCloudContent];
options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
@"myApp.store", NSPersistentStoreUbiquitousContentNameKey,
cloudURL, NSPersistentStoreUbiquitousContentURLKey,
nil];
}
else {
options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];
}
И я добавил это в managedObjectContext для уведомлений:
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(mergeChangesFrom_iCloud:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:coordinator];
Несколько тысяч человек используют мое приложение и ввели много данных. Они не хотят вводить все это снова. Я хочу доставить эту новую версию приложения с поддержкой iCloud, но пока я не смогу заставить данные отображаться на обоих и сохранять синхронизацию, бессмысленно.