Создание UIManagedDocument и начальная синхронизация iCloud

Я добавляю синхронизацию iCloud в свое приложение. Мой магазин UIManagedDocument находится в песочнице, а его журнал изменений находится в iCloud (указанный NSPersistentStoreUbiquitousContentURLKey). Проблема в том, что когда я устанавливаю и запускаю приложение в первый раз на 2-м устройстве, первоначальная синхронизация (чтобы получить обновления, созданные на 1-м устройстве) занимает много минут. Это реальная проблема, потому что эта синхронизация, очевидно, происходит внутри UIManagedDocument:saveToURL:completionHandler. Таким образом, вызов блока обработчика завершения занимает много времени, и если я обращаюсь к моему UIManagedDocument до того, как UIManagedDocument:saveToURL вернется, я по понятным причинам получаю сбой.

Я хочу открыть базу данных быстро и затем выполнить синхронизацию в фоновом режиме. Как мне это сделать?


person TotoroTotoro    schedule 18.05.2012    source источник


Ответы (2)


Да, первоначальная синхронизация на втором устройстве может занять 90 секунд и более (iOS 7). У меня есть рабочий пример приложения iOS 7 с открытым исходным кодом, которое создает экземпляры UIManagedDocument. См.: https://github.com/DonBriggs/MultiDocumentPlusUUID. Сначала посмотрите скриншоты работы приложения на двух устройствах. Если снимки экрана решают вашу проблему, вы можете сами попробовать приложение и посмотреть код. Жду отзывов.

person Don    schedule 03.10.2013
comment
Спасибо Дон, я проверю ваш проект! - person TotoroTotoro; 03.10.2013

Вы упомянули «базу данных» и пометили этот вопрос с помощью CoreData. Однако вы имеете в виду UIManagedDocument, который синхронизируется иначе, чем базы данных CoreData. Если бы ваша база данных была CoreData, вы бы инициализировали ее с помощью нового API параллелизма NSManagedObjectContext. Взгляни на:

[[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];

Я успешно использовал это для асинхронной синхронизации базы данных CoreData, но я не уверен, насколько хорошо это применимо к UIManagedDocuments.

person melsam    schedule 19.05.2012
comment
Я не уверен, что вы имеете в виду, говоря, что UIManagedDocument синхронизируется не так, как базы данных CoreData. Целью UIManagedDocument является упрощение доступа к хранилищу CoreData (см. developer.apple.com/library/ios/#documentation/UIKit/Reference/). Ваше решение, похоже, не применяется напрямую, потому что с UIManagedDocument вы не запускаете NSManagedObjectContext самостоятельно. - person TotoroTotoro; 21.05.2012