Symbol nicht gefunden: kUTTypeImage


78

Ich habe einige Code-Teile aus der Apple-Dokumentation kopiert - und diese 2 Fehler erhalten:

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)

Was mache ich falsch?

EDIT: Der 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];
}

Ich denke, der Fehler ist, wo die letzte Methode beginnt, aber ich bin nicht sicher.

Ihr Beitrag hat nicht viel Kontext, um die Codeabschnitte zu erklären. Bitte erläutern Sie Ihr Szenario klarer.


(Es war nicht deine Schuld) Ich habe gelesen , alle docs ich finden kann UIImagePickerController, sprechen sie über die Verwendung kUT*für mediaTypes, aber in ihrem Beispielcode, sie oft passieren nur die Werte von einer Funktion zum Array. Sie verwenden es nie in ihrem Code und erwähnen nicht, dass Sie es importieren müssen.
Benc

Antworten:


194

Suchen Sie das Symbol ( kUTTypeImage) und suchen Sie das Bild / die Bibliothek, in der es vorhanden sein soll ( MobileCoreServices.frameworkin diesem Fall). Verknüpfen Sie dann Ihre Binärdatei mit diesem Framework.


63
Vergessen Sie auch nicht, den Header <MobileCoreServices / MobileCoreServices.h>
GreyHands

3
Hat funktioniert! Anscheinend habe ich die CoreFoundation und nicht die MobileCoreServices verlinkt.
Lior Pollak

1
oder setzen Sie @import MobileCoreServices; Wenn Sie das Framework nicht importieren und die ganze böse Arbeit erledigen möchten
Catalin


1

Bei Verwendung mit UIDocumentPickerViewControllerdo:

import MobileCoreServices

let type = String(kUTTypeImage)
let documentPickerViewController = UIDocumentPickerViewController(documentTypes: [type], in: .import)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.