iCloud и существующее хранилище Core Data для приложения «обувная коробка» - PullRequest
0 голосов
/ 29 января 2012

У меня есть приложение с одним хранилищем 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, но пока я не смогу заставить данные отображаться на обоих и сохранять синхронизацию, бессмысленно.

1 Ответ

0 голосов
/ 29 января 2012

Хороший ночной сон всегда помогает.

Обратите внимание, у меня есть резервная копия базы данных SQLite, уже взятая с моего основного устройства через общий доступ к файлам iTunes.

У меня включен общий доступ к файлам iTunes. Я создаю приложение на каждом устройстве и запускаю в XCode. Остановите каждое устройство. Перейдите в iTunes. Через файлообменник я удаляю базу данных sqlite на каждом устройстве. Синхронизировать устройства. Затем я выбираю одно устройство и восстанавливаю на него свою резервную копию базы данных, используя общий доступ к файлам iTunes. Синхронизировать устройство.

Запустите мое приложение на устройстве с восстановленной БД. Затем я запускаю свое приложение на втором устройстве, на котором нет базы данных (помните, оно было удалено выше). Прождал минуту, и вот, данные действительно появились. Кажется, я услышал слабый звук пения ангельского хора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...