Laden von UIImage von UIImagePickerControllerReferenceURL

Ich verwende einen UIImagePickerController, damit Benutzer ein Bild aus der Bildbibliothek auswählen können. Ich möchte dann den Speicherort dieser Datei in einer SQLite-Datenbank starten, damit ich später darauf verweisen kann.

Ich habe ein bisschen gegoogelt und bin ziemlich kurz davor. Ich weiß, dass ich die ReferenceURL des Elements erhalten kann, indem ich die delegate-Methode aufrufe:

    NSURL *picURL = [info objectForKey:@"UIImagePickerControllerReferenceURL"]

Dies gibt mir ein gültiges NSURL-Objekt und wenn ich picURL.absoluteString ausgebe, kann ich eine scheinbar gültige URL zum Speicherort der Assets-Library der Datei verwenden. Wenn ich jedoch versuche, ein NSData-Objekt mit dieser URL zu erstellen, damit ich wiederum ein UIImage erstellen kann, schlägt der Code fehl, da NSData nil zurückgibt. Zum Beispiel:

    NSURL *picURL = [info objectForKey:@"UIImagePickerControllerReferenceURL"]
    NSString *stringUrl = picURL.absoluteString;
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:stringUrl]];
    imgMain.image = [UIImage imageWithData:data]

Mir ist klar, dass ich mich hier etwas wiederhole, aber es geht darum, eine Zeichenfolgendarstellung der URL zu erhalten, die ich in SQLite speichern kann, und diese Zeichenfolge später zu verwenden, um ein Bild zu erstellen (der obige Code repräsentiert also diesen Gedankengang).

Ich habe einige Informationen über die Verwendung von ALAssetsLibrary gefunden, aber das hat mir alle möglichen Anpassungen gebracht, da es mit iOS 5 und ARC nicht gut zu funktionieren scheint. Ich erhalte immer wieder Fehlermeldungen. 'Empfängertyp ALAsset, z. B. Nachricht ist eine Forward-Deklaration. Ich kann Eigenschaften für die Datei festlegen, die auf ALAsset / ALAssetsLibrary verweist, um ARC zu ignorieren, wodurch der Erstellungsfehler beendet wird. Sobald ich den Codeblock verlasse, gehen die Daten jedoch verloren. Siehe unten:

    NSURL *referenceURL = [info objectForKey:UIImagePickerControllerReferenceURL];
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    __block UIImage *returnValue = nil;
    [library assetForURL:referenceURL resultBlock:^(ALAsset *asset) {
        returnValue = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];
    } failureBlock:^(NSError *error) {
       // error handling
    }];
    [library release];

returnValue gibt ein gültiges Bild zurück, aber sobald der Code das resultBlock verlässt, ist der Inhalt der Daten weg (d. h. returnValue wird wieder null).

Meine Frage lautet also: Wie verwende ich die UIImagePickerControllerReferenceURL und konvertiere sie in eine Zeichenfolge, die ich in SQLite speichern kann, und erstelle dann zu einem späteren Zeitpunkt mit dieser Zeichenfolge ein gültiges UIImage-Objekt?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage