UIDocumentPickerViewController - все файлы недоступны

Я тестирую новый UIDocumentPickerViewController API в iOS 8. Я хочу просто открыть файл в iCloud, чтобы посмотреть, как работает.

это код, который я запускаю из моего UIViewController:

- (IBAction)openDocument:(id)sender {
    [self showDocumentPickerInMode:UIDocumentPickerModeOpen];
}

- (void)showDocumentPickerInMode:(UIDocumentPickerMode)mode {
    UIDocumentPickerViewController *picker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[(NSString *)kUTTypeData] inMode:mode];

    picker.delegate = self;

    [self presentViewController:picker animated:YES completion:nil];
}

openDocument привязан к кнопке В IB. Когда я нажимаю на него, он открывает браузер iCloud, но каждая папка в нем выделена серым цветом (я создал некоторые тестовые файлы Keynote, Numbers и Pages), поэтому я не могу добраться до файлов:

Document Picker with files grayed out.

Я проверил документацию и сделал следующее (без везения):

  • включен iCloud в моем приложении (в разделе "Возможности" для хранения ключей и документов iCloud).
  • добавлен UTI для public.data в моем Инфо.plist следующим образом:

    <key>CFBundleDocumentTypes</key>
    

    CFBundleTypeIconFile икона.формат PNG CFBundleTypeName Мои_данные CFBundleTypeRole Зритель LSItemContentTypes общественный.данные LSTypeIsPackage NSDocumentClass Документ NSPersistentStoreTypeKey Двоичный

  • добавил NSUbiquitousContainerIsDocumentScopePublic ключ со значением YES к моей информации.файл plist.

есть идеи, что может быть неправильно или отсутствует?

2 ответов


документы iWork не соответствуют kUTTypeData, что соответствует kUTTypePackage.

однако в iOS 8 beta 3 мне пришлось использовать точный UTIs:

UIDocumentPickerViewController *picker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"com.apple.iwork.pages.pages", @"com.apple.iwork.numbers.numbers", @"com.apple.iwork.keynote.key"] inMode:mode];

**Swift 3+ Solution**  

откроется и предоставит доступ ко всем элементам на диске.

//open document picker controller

func openImportDocumentPicker() {
    let documentPicker = UIDocumentPickerViewController(documentTypes: ["public.item"], in: .import)
    documentPicker.delegate = self
    documentPicker.modalPresentationStyle = .formSheet
    self.present(documentPicker, animated: true, completion: { _ in })
}
/*
 *
 * Handle Incoming File
 *
 */

func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {
    if controller.documentPickerMode == .import {
        let alertMessage: String = "Successfully imported \(url.absoluteURL)"
   }
}
/*
 *
 * Cancelled
 *
 */

func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
    print("Cancelled")
}