Загрузка UIImage из UIImagePickerControllerReferenceURL

Я использую UIImagePickerController, чтобы позволить пользователям выбирать изображение из библиотеки изображений. Затем я хочу указать местоположение этого файла в базе данных sqlite, чтобы я мог обратиться к нему позже.

Я занимался поиском того, как это сделать, и подхожу довольно коротко. Я знаю, что могу получить ReferenceURL элемента, вызвав внутри метода делегата:

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

Это действительно дает мне действительный объект NSURL, и если я вывожу picURL.absoluteString, я могу получить то, что кажется допустимым URL-адресом расположения библиотеки ресурсов файла. Однако, если я пытаюсь создать объект NSData с этим URL, чтобы я мог, в свою очередь, создать UIImage, код завершается ошибкой, потому что NSData возвращает nil. Например:

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

Я понимаю, что в данном случае я несколько повторяюсь, но смысл состоит в том, чтобы получить строковое представление URL, которое я могу сохранить в sqlite, а затем использовать указанную строку позже для создания изображения (поэтому приведенный выше код представляет этот ход мысли).

Я нашел некоторую информацию об использовании ALAssetsLibrary, но это дало мне всевозможные припадки, так как не похоже, что это хорошо работает с iOS 5 и ARC. Я продолжаю получать сообщения об ошибках "Тип получателя ALAsset, например, сообщение является предварительным объявлением. Я могу установить свойства для файла, который ссылается на ALAsset / ALAssetsLibrary, чтобы игнорировать ARC, что останавливает ошибку сборки, но затем, как только я покидаю блок кода, данные исчезают. Увидеть ниже:

    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 возвращает верное изображение, но как только код выходит из resultBlock, содержимое данных исчезает (т.е. returnValue снова становится нулевым).

Поэтому мой вопрос: как мне использовать UIImagePickerControllerReferenceURL и преобразовать его в строку, которую я могу сохранить в sqlite, а затем использовать эту строку для создания действительного объекта UIImage в более позднее время?

Ответы на вопрос(1)

Ваш ответ на вопрос