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

Ela*_*hts 0 iphone objective-c uiimagepickercontroller uiimage ios

这真让我抓狂!

我已成功将照片从相机以及如果从相机胶卷中选择现有照片保存到我的应用程序文档目录中。执行此操作的代码如下。注意,我知道这部分正在工作,因为在模拟器中,我可以浏览至应用程序的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
Run Code Online (Sandbox Code Playgroud)

拍摄或选择图像后:

- (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
Run Code Online (Sandbox Code Playgroud)

现在-无法使用的部分(获取并显示照片):

// 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;
Run Code Online (Sandbox Code Playgroud)

}

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

ama*_*ttn 5

您的问题在这里:

UIImage *image = [UIImage imageNamed:fullPathToFile];
Run Code Online (Sandbox Code Playgroud)

UIImage imageNamed:仅适用于套装中的图像。它不适用于documents目录中的图像。

试试吧imageWithContentsOfFile: