5 votes

UIDocumentPickerViewController n'appelle pas didPickDocumentAtURL sur Mac Catalyst

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 :

sandbox settings with User Selected File set to Read/Write

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X