Как сохранить и перезагрузить изображение с помощью ALAsset? - PullRequest
4 голосов
/ 09 февраля 2012

Я пишу приложение, которое позволяет пользователям делать фотографии и назначать их на устройство. Для этого мне нужно иметь возможность сохранить URL-адрес снятого изображения и затем перезагрузить его.

Я знаю, что было несколько дискуссий по этому поводу, но странным образом ни один из Ansers не помог мне ...

Итак, вот мой код для сохранения изображения:

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    ALAssetsLibrary * library = [[ALAssetsLibrary alloc] init];
    UIImage * image;

    // Request to save Image
    if ([picker sourceType] == UIImagePickerControllerSourceTypeCamera) {
        image = [info objectForKey:UIImagePickerControllerEditedImage];
        [library writeImageToSavedPhotosAlbum:[image CGImage] orientation:(ALAssetOrientation)[image imageOrientation] completionBlock:^(NSURL * assertURL, NSError * error){
            if (error) {
                UIAlertView * alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"PictureSaveErrorTitle", @"Title if saving picture fails") 
                                                                 message:NSLocalizedString(@"PictureSaveErrorMessage", @"Message if saving picture fails") 
                                                                delegate:nil 
                                                       cancelButtonTitle:NSLocalizedString(@"PictureSaveErrorOK", @"OK if saving picture fails") 
                                                       otherButtonTitles:nil];
                [alert show];
            } else {
                [self setUserImage:[assertURL absoluteString]];
                [imageOfDevice setImage:image];
            }
        }];
    } else {
        image = [info objectForKey:UIImagePickerControllerOriginalImage];
        [self setUserImage:[[info valueForKey:UIImagePickerControllerReferenceURL] path]];
    }

    [self dismissModalViewControllerAnimated:YES];
}

И это для перезагрузки изображения:

if (userImage != nil) {
        ALAssetsLibrary * library = [[ALAssetsLibrary alloc] init];
        [library assetForURL:[NSURL fileURLWithPath:userImage] 
                 resultBlock:^(ALAsset * asset){
                     [imageOfDevice setImage:[UIImage imageWithCGImage:[asset thumbnail]]];
                 }
                failureBlock:^(NSError * error){
                    NSLog(@"cannot get image - %@", [error localizedDescription]);
                }];
}

Кто-нибудь видит какую-то ошибку?

Спасибо за помощь,

sensslen

1 Ответ

7 голосов
/ 21 февраля 2012

Простое решение состоит в том, что вы передаете в поле absoluteString вместо NSUrl.

Этот код работает для меня в средстве выбора завершено.

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
if( [picker sourceType] == UIImagePickerControllerSourceTypeCamera )
{
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
    [library writeImageToSavedPhotosAlbum:image.CGImage orientation:(ALAssetOrientation)image.imageOrientation completionBlock:^(NSURL *assetURL, NSError *error )
    {
        NSLog(@"IMAGE SAVED TO PHOTO ALBUM");
        [library assetForURL:assetURL resultBlock:^(ALAsset *asset )
        {
            NSLog(@"we have our ALAsset!");
        } 
                failureBlock:^(NSError *error )
         {
             NSLog(@"Error loading asset");
         }];
    }];
}
...