84 votes

Symbole non trouvé : kUTTypeImage

J'ai copié quelques bouts de code de la documentation d'apple - et j'ai obtenu ces 2 erreurs :

Undefined symbols for architecture i386:
  "_kUTTypeImage", referenced from:
      -[ImagePicker imagePickerController:didFinishPickingMediaWithInfo:] in ImagePicker.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Qu'est-ce que je fais de mal ?

EDIT : Le code :

- (IBAction) showSavedMediaBrowser {
    [self startMediaBrowserFromViewController: self
                                usingDelegate: (id)self];
}

- (BOOL) startMediaBrowserFromViewController: (UIViewController*) controller
                               usingDelegate: (id <UIImagePickerControllerDelegate,
                                               UINavigationControllerDelegate>) delegate {

    if (([UIImagePickerController isSourceTypeAvailable:
          UIImagePickerControllerSourceTypeSavedPhotosAlbum] == NO)
        || (delegate == nil)
        || (controller == nil))
        return NO;

    UIImagePickerController *mediaUI = [[UIImagePickerController alloc] init];
    mediaUI.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

    // Displays saved pictures and movies, if both are available, from the
    // Camera Roll album.
    mediaUI.mediaTypes =
    [UIImagePickerController availableMediaTypesForSourceType:
     UIImagePickerControllerSourceTypeSavedPhotosAlbum];

    // Hides the controls for moving & scaling pictures, or for
    // trimming movies. To instead show the controls, use YES.
    mediaUI.allowsEditing = YES;

    mediaUI.delegate = delegate;

    [controller presentViewController:mediaUI animated:YES completion:nil];
    return YES;
}

- (void) imagePickerController: (UIImagePickerController *) picker
 didFinishPickingMediaWithInfo: (NSDictionary *) info {

    NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
    UIImage *originalImage, *editedImage, *imageToUse;

    // Handle a still image picked from a photo album
    if (CFStringCompare ((__bridge_retained CFStringRef) mediaType, kUTTypeImage, 0)
        == kCFCompareEqualTo) {

        editedImage = (UIImage *) [info objectForKey:
                                   UIImagePickerControllerEditedImage];
        originalImage = (UIImage *) [info objectForKey:
                                     UIImagePickerControllerOriginalImage];

        if (editedImage) {
            imageToUse = editedImage;
        } else {
            imageToUse = originalImage;
        }
        // Do something with imageToUse
    }

    [[picker parentViewController] dismissModalViewControllerAnimated: YES];
}

Je pense que l'erreur se situe là où commence la dernière méthode, mais je n'en suis pas sûr.

Votre message ne contient pas beaucoup de contexte pour expliquer les sections du code ; veuillez expliquer votre scénario plus clairement.

0 votes

(Ce n'était pas votre faute) J'ai lu toutes les documentations que j'ai pu trouver sur UIImagePickerController ils parlent d'utiliser kUT* pour mediaTypes Mais dans leurs exemples de code, ils se contentent souvent de transmettre les valeurs d'une fonction au tableau. Ils ne l'utilisent jamais dans leur code et ne mentionnent pas que vous devez l'importer.

203voto

justin Points 72871

Recherchez le symbole ( kUTTypeImage ) et localise l'image/bibliothèque dans laquelle il doit exister ( MobileCoreServices.framework dans ce cas). Puis liez votre binaire avec ce framework.

63 votes

N'oubliez pas non plus d'importer l'en-tête <MobileCoreServices/MobileCoreServices.h>.

4 votes

Cela a fonctionné ! apparemment j'ai lié le CoreFoundation et non le MobileCoreServices.

1 votes

Ou mettez @import MobileCoreServices ; si vous ne voulez pas importer le framework et faire tout le sale boulot

50voto

CodeBender Points 9521

Réponse obligatoire de Swift :

import MobileCoreServices

2voto

Sherwin Zadeh Points 153

En cas d'utilisation avec UIDocumentPickerViewController faire :

import MobileCoreServices

let type = String(kUTTypeImage)
let documentPickerViewController = UIDocumentPickerViewController(documentTypes: [type], in: .import)

2voto

Gerard Points 510

Pour Swift, il semble que ce soit dans

import UniformTypeIdentifiers

let type = String(describing: UTType.image)

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