Problème avec UIDocumentPickerViewController

Bonjour à tous et toutes,

Je viens vous réveiller avec une petite question.

Dans mon application iPocket Draw, j'importais des documents avec :

picker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"public.data"] inMode:UIDocumentPickerModeImport];

que j'ai voulu modifier pour prendre en compte les mises à jour, de cette façon :

 if (@available(macCatalyst 14.0, iOS 14.0, *)) {
    picker = [[UIDocumentPickerViewController alloc] initForOpeningContentTypes:@[@"public.data"] asCopy:YES];
} else {
    picker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"public.data"] inMode:UIDocumentPickerModeImport];
}

Et ça plante sur la ligne ajoutée avec le message :
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString identifier]: unrecognized selector sent to instance 0x104750198'
J'ai essayé de modifier @public.data par l'identifiant de mon Exported Type Identifier mais sans succès.

Des idées ?

Réponses

  • LarmeLarme Membre
    juillet 2021 modifié #2

    La méthode est :

    - (instancetype)initForOpeningContentTypes:(NSArray<UTType *> *)contentTypes 
                                        asCopy:(BOOL)asCopy;
    

    Le paramètre est de type (NSArray<UTType *> *), pas (NSArray<NSString *> *)

    Le code interne s'attend donc à des éléments UTType, qui ont une property identifier. Donc il devrait faire pour chacun des contentTypes: [aContentType identifier], or tu as mis a NSString, donc c'est [aString identifier] et tu as ton erreur...

    Donc, il y a sûrement une des méthodes qui va bien dans UTType pour que ça s'initialize avec un NSString.

  • Merci Larme !

    J'essaie donc d'utiliser :
    [UTType exportedTypeWithIdentifier:
    mais j'ai une erreur :
    Class method '+exportedTypeWithIdentifier:conformingToType:' not found (return type defaults to 'id')
    Receiver 'UTType' is a forward class and corresponding @interface may not exist
    Je suppose que je dois déclarer que j'utilise UTType mais je n'ai pas trouvé comment...

  • J'avance.
    J'ai ajouté :
    #import <UniformTypeIdentifiers/UTDefines.h>
    #import <UniformTypeIdentifiers/UTType.h>
    mais j'ai maintenant une erreur :
    Undefined symbol: _OBJC_CLASS_$_UTType

  • Tu as importé le framework ? En non mandatory, weak car dispo que sur iOS 14+?
  • Oups, non !
    J'avais essayé un ou deux autres mais pas vu celui-là.
    En choix, il y a : "Do Not Embed", "Embed & Sign" ou "Embed without Signing" ?
    Tous les autres sont : "Do Not Embed".

    Merci Larme.

Connectez-vous ou Inscrivez-vous pour répondre.