Cargando UIImage desde UIImagePickerControllerReferenceURL

Estoy usando un UIImagePickerController para permitir que los usuarios seleccionen una imagen de la biblioteca de imágenes. Luego, deseo iniciar la ubicación de ese archivo en una base de datos sqlite para poder consultarlo más adelante.

He estado haciendo un poco de google sobre cómo hacer esto y estoy llegando bastante corto. Sé que puedo obtener el ReferenceURL del elemento llamando al método de delegado:

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

Esto me da un objeto NSURL válido y si hago una salida de picURL.absoluteString puedo ver lo que parece ser una URL válida para la ubicación de la biblioteca de recursos del archivo. Sin embargo, si trato de crear un objeto NSData con esta url para que a su vez pueda crear un UIImage, el código falla porque NSData devuelve nil. Por ejemplo:

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

Me doy cuenta de que estoy siendo algo repetitivo aquí, pero el punto es agarrar una representación de cadena de la URL que puedo almacenar en sqlite y luego usar dicha cadena más adelante para crear una imagen (de modo que el código anterior representa esa línea de pensamiento).

Encontré algo de información sobre el uso de ALAssetsLibrary pero eso me dio todo tipo de ajustes, ya que no parece funcionar bien con iOS 5 y ARC. Sigo recibiendo mensajes de error 'El tipo ALAsset del receptor, por ejemplo, es un mensaje de reenvío. Puedo establecer propiedades en el archivo que hace referencia a ALAsset / ALAssetsLibrary para ignorar ARC, que detiene el error de compilación, pero tan pronto como salgo del bloque de código, los datos desaparecen. Vea abajo:

    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 devuelve una imagen válida, pero tan pronto como el código sale del resultado, el contenido de los datos desaparece (es decir, returnValue vuelve a ser nulo).

Entonces, mi pregunta es: ¿cómo uso el UIImagePickerControllerReferenceURL y lo convierto en una cadena que puedo almacenar en sqlite y luego uso dicha cadena para crear un objeto UIImage válido en un momento posterior?

Respuestas a la pregunta(1)

Su respuesta a la pregunta