2012-02-09 2 views
4

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

Я знаю, что там было несколько дискуссий на том, что, но как ни странно ни один из 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

+0

Я все еще ищу кого-нибудь с отличной идеей, чтобы помочь мне. Я все еще придерживаюсь этой глупой проблемы. На самом деле это не может быть так сложно. Есть множество приложений, которые делают что-то с Photo Library, не так ли? – sensslen

ответ

7

Простое решение состоит в том, что вы передаете в 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"); 
     }]; 
    }]; 
} 
+0

Ну, на самом деле я решил сохранить Картинки в конкретном каталоге приложения, и это работает уже сейчас. Тем не менее я пробовал свой Кодекс. Я могу сохранить изображение - это никогда не было проблемой. проблема в том, чтобы перезагрузить его ... Я не смог получить миниатюру изображения ... Не могли бы вы показать код для загрузки изображения? – sensslen

+1

просто замените NSLog («у нас есть наш ALAset!»); с UIImage * image = [UIImage imageWithCGImage: [свойство defaultRepresentation] .fullResolutionImage]; –

+0

Хм, звучит просто ... Я думал, что пробовал это, но, скорее всего, я сделал что-то еще ... Тем не менее, спасибо за вашу помощь! – sensslen

Смежные вопросы