iCloud UIDocumentPicker периодически падает и зависает

Выпуск:

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

Я включил разрешение iCloud в приложении и, похоже, не могу найти причину, по которой оно периодически дает сбой. Есть ли проверка, что мне не хватает?

Время от времени он также висит примерно на 5 секунд (обычно в преддверии сбоя)

Код:

#pragma mark - iCloud =======================================================================================================
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {

BOOL fileUrlAuthozied = [url startAccessingSecurityScopedResource];
NSURL *ubiquityURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
NSLog(@"ubiquityURL - %@",ubiquityURL);

if(fileUrlAuthozied){
    NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] init];
    NSError *error;

    [fileCoordinator coordinateReadingItemAtURL:url options:0 error:&error byAccessor:^(NSURL *newURL) {

        NSData *data = [NSData dataWithContentsOfURL:newURL];
        //Do something with data
        selectedDocumentToUpload = [[UploadDocumentObj alloc] initWithiCloudDocument:data];
        [self performSegueWithIdentifier:@"goToRename" sender:nil];

    }];
    [url stopAccessingSecurityScopedResource];
}else{
     //Error handling
    [Lib showErrorMessageWithTitle:@"Alert" message:@"E-Sign could not retrive the document!\nPlease try again." delegate:self];

}
}

Ошибка:

2015-03-18 16:22:15.955 E-Sign[6338:1860982] *** Assertion failure in -[UIDocumentPickerViewController _commonInitWithCompletion:], /SourceCache/UIKit/UIKit-3318.93/UIDocumentPickerViewController.m:66
2015-03-18 16:22:15.960 E-Sign[6338:1860982] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Application initializing document picker is missing the iCloud entitlement. Is com.apple.developer.icloud-container-identifiers set?'

Другие ошибки:

2015-03-18 16:33:45.884 E-Sign[6357:1864309] plugin com.apple.UIKit.fileprovider.default interrupted
2015-03-18 16:33:45.885 E-Sign[6357:1864309] plugin com.apple.UIKit.fileprovider.default invalidated

Кто-нибудь сталкивался с этим раньше?

4 ответа

Я недавно наткнулся на ту же проблему:

*** Ошибка подтверждения в -[UIDocumentPickerViewController _commonInitWithCompletion:]

вызывается из-за отсутствия возможностей приложения. Зайдите в свой билд и выберите Capabilities -> iCloud.

Активируйте его с помощью переключателя с правой стороны и включите iCloud Documents и CloudKit. (Примечание: это будет работать только с платной учетной записью разработчика)

Rebuild-> Run

Также имейте в виду:

Права на iCloud доступны только для приложений, представленных в App Store или Mac App Store. (Источник)

Кажется, что следующая ошибка происходит для права доступа iCloud, устанавливается неправильно. Пожалуйста, проверьте это снова. Ваше содержащее приложение и расширения должны быть в одной группе приложений. Включите группы приложений из Возможностей, если они не включены. Если оба параметра установлены правильно, но вы все равно получаете сообщение об ошибке, то не знаете, где это может произойти.

2015-03-18 16:22:15.960 E-Sign[6338:1860982] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Application initializing document picker is missing the iCloud entitlement. Is com.apple.developer.icloud-container-identifiers set?'

Я также сталкиваюсь с другими ошибками. Вот почему я здесь.

После долгих исследований я пришел к важному выводу:

Я имел дело с такой же проблемой, и это было очень больно. Поэтому после глубокой проверки кода и отладки окончательный результат для этого - управлять изменениями пользовательского интерфейса, которые вы выполняете во время отображения средства выбора. Переход к отображению выбора и изменений пользовательского интерфейса вызывает раздражающее поведение и в конечном итоге приводит к сбоям и зависаниям.

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

Моя проблема была решена после внесения этих изменений.

При вызове метода убедитесь, что вы вызываете его в фоновом потоке. Это решит проблему.

dispatch_async (dispatch_get_global_queuue (DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^ {// ВЫЗОВ СВОЙ МЕТОД});

Другие вопросы по тегам