Je suis en UIDocumentPickerViewController
tester la nouvelle API UIDocumentPickerViewController
dans iOS 8. Je veux juste ouvrir un file dans iCloud, pour voir comment l'interaction fonctionne.
C'est le code que je UIViewController
depuis mon UIViewController
:
- (IBAction)openDocument:(id)sender { [self showDocumentPickerInMode:UIDocumentPickerModeOpen]; } - (void)showDocumentPickerInMode:(UIDocumentPickerMode)mode { UIDocumentPickerViewController *picker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[(NSSsortingng *)kUTTypeData] inMode:mode]; picker.delegate = self; [self presentViewController:picker animated:YES completion:nil]; }
openDocument
est lié à un button dans IB. Quand je le tape, il ouvre le browser iCloud, mais chaque dossier est grisé (j'ai créé quelques files Keynote, Numbers et Pages test), donc je ne peux pas accéder aux files:
.
J'ai vérifié quelques documents et j'ai fait ce qui suit (sans chance):
Ajout de l'UTI pour public.data
dans mon Info.plist comme suit:
<key>CFBundleDocumentTypes</key>
CFBundleTypeIconFile icon.png CFBundleTypeName MyData CFBundleTypeRole Viewer LSItemContentTypes public.data LSTypeIsPackage NSDocumentClass Document NSPersistentStoreTypeKey Binaire
Ajout de la key NSUbiquitousContainerIsDocumentScopePublic
avec la valeur YES
à mon Info.plist.
Une idée de ce qui pourrait être faux ou manquant?
Les documents iWork ne sont pas conforms à kUTTypeData
, ils sont conforms à kUTTypePackage
.
Cependant, dans iOS 8 beta 3, j'ai dû utiliser les UTI exactes:
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**
Va ouvrir et donner access à tous les éléments sur le disque.
//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: Ssortingng = "Successfully imported \(url.absoluteURL)" } } /* * * Cancelled * */ func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) { print("Cancelled") }