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), поэтому я не могу добраться до файлов:
.
Я проверил документацию и сделал следующее (без везения):
- включен 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")
}