2014-09-22 3 views
0

Я использую UIImagePickerController, чтобы выбрать изображение и загрузить его в UIImageView, но я хочу сохранить пользователя и загрузить его позже, я думаю, это будет хорошим исключением абсолютного пути к пользовательским значениям по умолчанию, но не работает (Невозможно загрузить изображение в UIImageView из абсолютного пути

Как сохранить путь // все работает

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo: (NSDictionary *)info 
{ 

[self.backgroundImage setImage:info[UIImagePickerControllerOriginalImage]]; 
NSURL* localUrl = (NSURL *)[info valueForKey:UIImagePickerControllerReferenceURL]; 

//in localUrl I see: assets-library://asset/asset.JPG?id=B6C0A21C-07C3-493D-8B44-3BA4C9981C25&ext=JPG 

NSUserDefaults *saves = [NSUserDefaults standardUserDefaults]; 
[saves setValue:[localUrl absoluteString] forKey:@"backimage"]; 
[saves synchronize]; 

[self dismissViewControllerAnimated:YES completion:nil]; 
} 

Как я пытаюсь нагрузки:. // не работает (

NSUserDefaults *saves = [NSUserDefaults standardUserDefaults]; 

if(![saves objectForKey:@"backimage"]){ 

[self.backgroundImage setImage:[UIImage imageNamed:@"gameBackiPhone"]]; 

}else{ 

NSURL *url = [NSURL URLWithString:[saves objectForKey:@"backimage"]]; 

//in url I see: assets-library://asset/asset.JPG?id=B6C0A21C-07C3-493D-8B44-3BA4C9981C25&ext=JPG 

UIImage *bimage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:url]]; 

[self.backgroundImage setImage:bimage]; 

} 

Как должно быть, я не могу найти

ответ

1

Вы не можете загрузить изображение напрямую с помощью URL-адреса актива, для его достижения вам необходимо использовать класс ALAssetsLibrary. Используйте следующий фрагмент для загрузки изображения с использованием URL-адреса.

// *** It will return Asset from URL passed, create Image from Asset and set into your `UIImageView` *** 
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) 
{ 
    ALAssetRepresentation *rep = [myasset defaultRepresentation]; 
    CGImageRef iref = [rep fullResolutionImage]; 
    if (iref) { 
     UIImage *largeimage = [UIImage imageWithCGImage:iref]; 
     yourImageView.image = largeImage; 
    } 
}; 

// *** If any error occurs while getting image from Asset Library following block will be invoked *** 
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror) 
{ 
    NSLog(@"Can't get image - %@",[myerror localizedDescription]); 
}; 

// *** Set Asset URL to load Image (assets-library://asset/asset.JPG?id=B6C0A21C-07C3-493D-8B44-3BA4C9981C25&ext=JPG) *** 
[NSURL *asseturl = [NSURL URLWithString:yourURL]; 
// *** Create ALAssetsLibrary Instance and load Image *** 
ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease]; 
[assetslibrary assetForURL:asseturl 
      resultBlock:resultblock 
      failureBlock:failureblock]; 

Не забудьте импортировать AssetsLibrary рамки в свой проект.

+0

Не могу понять, как использовать его, я скопировать этот код, но Xcode не знает, что это ALAssetsLibraryAssetForURLResultBlock ( –

+0

Все работает спасибо для новичков, как я добавляю @import AssetsLibrary;! –

+0

Я редактировал ответ, как на ваш комментарий Счастливого кодирования. :) –