2012-03-23 63 views
0

这让我疯狂!UIImagePickerController - 保存和检索照片从应用程序文档目录

我已成功将照片保存到我的应用程序文档目录中,如果我从照相机卷中选择现有照片。执行此操作的代码如下所示。注意我知道这部分工作,因为在模拟器中,我可以浏览到apps Documents文件夹并查看正在保存的文件。

实施例 “保存” 代码:

//Note: code above snipped to keep this part of the question short 
    case 1: 
    { 
     // select from library 
     NSLog(@"select from camera roll"); 

     if([util_ isPhotoLibraryAvailable]) 
     { 
      UIImagePickerController *controller = [[UIImagePickerController alloc] init]; 
      controller.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
      NSMutableArray *mediaTypes = [[NSMutableArray alloc] init]; 
      if([util_ canUserPickPhotosFromPhotoLibrary]) 
      { 
       [mediaTypes addObject:(__bridge NSString *)kUTTypeImage]; 
      } 
      controller.mediaTypes = mediaTypes; 
      controller.delegate = self; 
      controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
      [self presentModalViewController:controller animated:YES]; 
     } 
    } break; 
//code below snipped out 

,一旦图象被取或选自:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    NSLog(@"picker returned successfully"); 

    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; 
    if([mediaType isEqualToString:(__bridge NSString *)kUTTypeImage]) 
    { 
     UIImage *originalImage = [info objectForKey:UIImagePickerControllerOriginalImage]; 
     UIImage *resizedImage = [util_ createThumbnailForImage:originalImage thumbnailSize:[util_ determineIPhoneScreenSize]]; 
     NSData *imageData = UIImagePNGRepresentation(resizedImage); 
     NSString* imageName = @"MyImage.png"; 
     NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString* documentsDirectory = [paths objectAtIndex:0]; 
     NSString* fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imageName];   
     [imageData writeToFile:fullPathToFile atomically:NO]; 

     NSLog(@"fullPathToFile %@", fullPathToFile); 
     // this outputs the following path in the debugger 
     // fullPathToFile /Users/me/Library/Application Support/iPhone Simulator/5.0/Applications/47B01A4C-C54F-45C4-91A3-C4D7FF9F95CA/Documents/MyImage.png 

     // rest snipped out - at this point I see the image in the simulators/app/Documents directory 

现在 - 不工作(读取和显示照片)的部分:

// code above snipped out (we're in tableView:cellForRowAtIndexPath) 

imageButton_ = [[UIButton alloc] initWithFrame:CGRectMake(5, 5, 200, 200)]; 
NSString* imageName = [contentArray_ objectAtIndex:indexPath.row]; 
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
SString* documentsDirectory = [paths objectAtIndex:0]; 
NSString* fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imageName]; 
UIImage *image = [UIImage imageNamed:fullPathToFile]; 
[imageButton_ setImage:image forState:UIControlStateNormal]; 

[cell addSubview:imageButton_]; 

NSLog(@"fullPathToFile: %@", fullPathToFile); 
// this outputs the following path in the debugger 
// fullPathToFile: /Users/me/Library/Application Support/iPhone Simulator/5.0/Applications/47B01A4C-C54F-45C4-91A3-C4D7FF9F95CA/Documents/MyImage.png 

return cell; 

}

因此,我得到一个没有图像显示在单元格中的空按钮。我也取代了按钮,一个UIImageView和仍然没有运气...

+0

嗨,刚刚阅读你的问题 - util_和我希望你不介意我问,但什么是util_声明? – 2012-05-20 04:09:53

+0

util_只是一个实用工具类,我创建了一个实用类型的方法,它没什么特别的。 – ElasticThoughts 2012-05-20 13:55:14

回答

4

你的问题是在这里:

UIImage *image = [UIImage imageNamed:fullPathToFile]; 

UIImage imageNamed:仅在束图像。它不适用于文档目录中的图像。

改为尝试imageWithContentsOfFile:

+0

啊!那么我应该保存在其他地方还是保存在文档中并使用其他方法来获取它?那另一种方法会是什么? – ElasticThoughts 2012-03-23 03:18:15

+0

看到我的编辑...'imageWithContentsOfFile:' – amattn 2012-03-23 03:24:58

+0

这样做的伎俩,谢谢! – ElasticThoughts 2012-03-23 16:08:57

相关问题