2014-01-29 169 views
3

我试图将图像从相机保存到照片库,然后存储保存的图像的URL。我的代码:将图像保存到照片库并获取保存的图像的URL

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

ALAssetsLibrary *library = [[ALAssetsLibrary alloc]init]; 
[library writeImageToSavedPhotosAlbum:(__bridge CGImageRef)([info objectForKey:UIImagePickerControllerOriginalImage]) 
          orientation:ALAssetOrientationUp completionBlock:^(NSURL *assetURL, NSError *error) { 
           if(error == nil) { 
            _myImageUrl = [NSString stringWithFormat:@"%@",assetURL]; 
            NSLog(@"%@",assetURL); 
           } else NSLog(@"%@",error); 
          }]; 

[picker dismissViewControllerAnimated:YES completion:nil];} 

我的问题是,assetUrl始终为NULL。有任何想法吗? 谢谢!

+0

可能与本文相关。可能是iOS7的错误。 [ALAssetsLibraryWriteVideoCompletionBlock返回未定义的值] [1] [1]:http://stackoverflow.com/questions/20813540/alassetslibrarywritevideocompletionblock-return-undefined-values – GregP

回答

0

最后,在阅读更多内容后,我发现答案:函数的第一个参数是CGImageRef类型,而(__bridge CGImageRef)不符合我的预期;但如果我打电话UIImage对象的CGImage方法,它的工作原理。正确的方法是:

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

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc]init]; 
    CGImageRef image = [[info objectForKey:UIImagePickerControllerOriginalImage] CGImage]; 
    [library writeImageToSavedPhotosAlbum:image 
           orientation:ALAssetOrientationUp 
          completionBlock:^(NSURL *assetURL, NSError *error) { 
            if(error == nil) { 
             _myImageUrl = [NSString stringWithFormat:@"%@",assetURL]; 
             NSLog(@"%@",assetURL); 
            } else NSLog(@"%@",error); 
           }]; 

    self.toDoImage.image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    [picker dismissViewControllerAnimated:YES completion:nil]; 
}