Почему 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");
}