Почему iCloud иногда перестает работать?

У меня иногда возникают проблемы с открытием UIDocuments, которые хранятся в iCloud. Я вызываю следующий код в самом начале моего приложения после проверки доступности iCloud и получения результатов NSMetaDataQuery. Это работает в 98% всех случаев. Просто иногда (например, иногда после повторной установки приложения) completionHandler никогда не будет называться:

FRNBDocument *doc = [[FRNBDocument alloc] initWithFileURL:fileURL];
[doc openWithCompletionHandler:^(BOOL success) {

    NSLog(@"... doc: openedWithCompletionHandler");

Как вы можете видеть из кода, я инициализирую новый экземпляр UIDocument (FRNBDocument), таким образом, это не может быть так, как старый UIDocument все еще открыт, и поэтому этот не открывается.

единственный способ заставить приложение снова работать-это убить его, а затем перейти к настройкам.app > iCloud > документы и данные и выключите его, а затем снова включите. Когда я вернусь в приложение, UIDocs будет загружен без проблем.

Я заметил, что другие приложения (например, xTrail by sophiestication) имеют ту же проблему, и что я могу заставить их работать только после выполнения трюк, описанный выше.

что происходит?

3 ответов


OK, похоже, это ошибка iCloud. Я связался с Apple и они предложили отправить отчет об ошибке. Так я и сделал (id 12260670).

то, что я сейчас сделаю, это просто реализовать таймер. Если UIDocs не загрузились после 20 секунд, я покажу AlertView, сообщив пользователю перейти к настройкам.app > iCloud > документы и данные и выключите его, а затем снова включите.

Это так печально. Невероятно.


У меня аналогичная проблема. NSMetadataQuery возвращает результат, но openWithCompletionHandler: очень редко не завершается, и поэтому данные приложения не будут загружаться. Некоторое время у меня был обходной путь, проверив NSMetadataUbiquitousItemIsDownloadedkey перед попыткой загрузить документ. Если бы не скачал я позвонил evictUbiquitousItemAtURL и потом startDownloadingUbiquitousItemAturl. Потом мне пришлось опроса с NSMetadataQuery для NSMetadataUbiquitousItemIsDownloadedkey должен быть true, и в это время я мог бы успешно вызвать openWithCompletionHandler. Это, казалось, решало проблему. Однако, к сожалению, это либо больше не работает в iOS 6, либо не работает все время. Пожалуйста, держите нас в курсе, если вы найдете лучший обходной путь или получите обновление об ошибке от Apple.


iCloud access требует возврата вызова функции

- (NSURL *)URLForUbiquityContainerIdentifier:(NSString *)containerID

возвращает

URL, указывающий на указанный контейнер повсеместности, или Нил если контейнер не может быть найден или хранилище iCloud недоступно для текущего пользователя или устройства.

ссылка

поскольку iCloud не так реагирует, я проверяю, получаю ли я URL-адресом и затем только приступить к синхронизация данных.

NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
if (ubiq) 
{
    NSLog(@"iCloud access at %@", ubiq);
    [self loadDocument];
} 
else 
{
    NSLog(@"No iCloud access");
}