UIImagePickerController - Save and Retrieve photo from Apps Document Directory

南笙酒味 提交于 2019-12-12 09:27:56

问题


This is driving me crazy!

I'm successfully saving a photo to my applications document directory from both the camera and if I choose an existing one from the camera roll. The code to do this is as follows. Note I know this part is working because in the simulator I can browse to the apps Documents folder and see the file being saved.

Example "save" code:

//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

And once the image is taken or selected:

- (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

Now - the part that is NOT working (fetching and displaying the photo):

// 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;

}

So, I get an empty button with no image displayed in the cell. I have also substituted the button for a UIImageView and still no luck...


回答1:


Your problem is here:

UIImage *image = [UIImage imageNamed:fullPathToFile];

UIImage imageNamed: is only for images in the bundle. It doesn't work for images in the documents directory.

Try imageWithContentsOfFile: instead.



来源:https://stackoverflow.com/questions/9833658/uiimagepickercontroller-save-and-retrieve-photo-from-apps-document-directory

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!