UIImagePickerController - 从Apps文档目录中保存和检索照片

时间:2012-03-23 03:05:00

标签: iphone objective-c ios uiimage 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替换了按钮,但仍然没有运气......

1 个答案:

答案 0 :(得分:5)

你的问题在这里:

UIImage *image = [UIImage imageNamed:fullPathToFile];

UIImage imageNamed:仅适用于捆绑中的图片。它不适用于文档目录中的图像。

请尝试imageWithContentsOfFile: