J'ai ce code dans un UIViewController
qui confirme à UIDocumentPickerDelegate
:
- (void)openTextFilePicker {
NSArray *UTIs = [NSArray arrayWithObjects:@"public.text", nil];
[self openFilePicker:UTIs];
}
- (void)openFilePicker:(NSArray *)UTIs {
UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:UTIs inMode:UIDocumentPickerModeImport];
documentPicker.delegate = self;
documentPicker.popoverPresentationController.barButtonItem = self.importButton;
[self presentViewController:documentPicker animated:TRUE completion:nil];
}
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURLs:(NSArray<NSURL *> *)urls {
[self documentPicker:controller didPickDocumentAtURL:[urls firstObject]];
}
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {
NSLog(@"picked document %@", url);
}
- (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller {
NSLog(@"cancelled");
}
Cela fonctionne bien sous iOS. Dans Mac Catalyst, le sélecteur de fichiers s'ouvre, je peux naviguer et sélectionner un fichier, mais lorsque je clique sur le bouton Ouvrir dans le sélecteur, ni l'un ni l'autre ne s'ouvre. didPickDocumentAtURLs
ni didPickDocumentAtURL
sont appelés. Cependant, si je clique sur le bouton Annuler dans le sélecteur, documentPickerWasCancelled
s'appelle.
Lorsque je clique sur Ouvrir, cette erreur apparaît dans la console :
Échec de l'association des vignettes pour l'URL choisie file:///**** avec la copie de la boîte de réception file:///**** : Erreur Domain=QLThumbnailErrorDomain Code=102 "(null)" UserInfo={NSUnderlyingError=0x600000da9a10 {Error Domain=GSLibraryErrorDomain Code=7 "pas de stockage pour file:///****" UserInfo={NSDescription=pas de stockage pour le fichier:///****}}
J'ai pensé que cela pouvait signifier que j'avais un problème avec les paramètres de sécurité de mon bac à sable, mais lorsque je change le mode de sélection pour UIDocumentPickerModeOpen
cette erreur ne se produit plus, mais didPickDocumentAtURL
n'est toujours pas appelé. Bref, voici mes paramètres de sandbox :
J'ai vu des messages concernant le sélecteur de documents qui s'ouvre en blanc, mais ce n'est pas le problème ici. Je n'ai vu qu'un seul message qui semble confirmer que cela fonctionne, mais il s'agissait de Swift ... se pourrait-il que cela fonctionne en Swift mais pas en Objective C ? Y a-t-il quelque chose d'autre qui m'échappe pour que cela fonctionne ?
UPDATE
Voici un nouveau projet Xcode avec le code minimum pour démontrer le problème. Comme pour mon projet complet, cela fonctionne bien sur iOS, mais n'appelle pas la fonction didPickDocument...
méthodes de délégation sur Mac.