didFinishPickingMediaWithInfo 返回 nil 照片 [英] didFinishPickingMediaWithInfo return nil photo

查看:136
本文介绍了didFinishPickingMediaWithInfo 返回 nil 照片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用

- (void)imagePickerController:(UIImagePickerController *)picker 
    didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    [[picker parentViewController] dismissModalViewControllerAnimated:YES]; 

    // MediaType can be kUTTypeImage or kUTTypeMovie. If it's a movie then you
    // can get the URL to the actual file itself. This example only looks for images.
    //   
    NSString* mediaType = [info objectForKey:UIImagePickerControllerMediaType];
    // NSString* videoUrl = [info objectForKey:UIImagePickerControllerMediaURL];

    // Try getting the edited image first. If it doesn't exist then you get the
    // original image.
    //
    if (CFStringCompare((CFStringRef) mediaType,  kUTTypeImage, 0) == kCFCompareEqualTo) {               
        UIImage* picture = [info objectForKey:UIImagePickerControllerEditedImage];
        if (!picture)
            picture = [info objectForKey:UIImagePickerControllerOriginalImage];             

        // **picture is always nil
            // info dictionary count = 1


    }

}

发生的事情是信息字典总是返回一个条目:

What is happening is that the info dictionary always returns with a single entry:

{UIImagePickerControllerMediaType ="public.image";

{ UIImagePickerControllerMediaType = "public.image";

这很棒,但从来没有图像.

which is great, but there is never an image.

我使用了这个论坛的一个很好的例子来做这件事,我很确定调用是正确的,但从来没有图像.

I was using a great example from this forum to do this, and I am pretty sure the calls are correct, but never an image.

提前致谢!

推荐答案

我知道这是几个月后的事,但我为此苦苦挣扎了几个小时,并在整个网站和 iphonedevsdk.com 上发现了同样的问题,但从未与一个有效的答案.

I know this is many months later, but I struggled with this for hours, and found this same question all over this site and iphonedevsdk.com, but never with a working answer.

总而言之,如果图像是从相机胶卷/照片库中选取的,它工作正常,但如果图像是使用相机拍摄的新照片,则它永远无法工作.好吧,这里是如何使它对两者都适用:

To summarize, if the image was picked from the camera roll/photo library it worked fine, but if the image was a new photo take with the camera it never worked. Well, here's how to make it work for both:

在尝试使用信息字典执行任何操作之前,您必须解除并释放 UIImagePickerController .超级清晰:

You have to dismiss and release the UIImagePickerController before you try to do anything with the info dictionary. To be super-clear:

这不起作用:

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

          // No good with the edited image (if you allowed editing)
  myUIImageView.image = [info objectForKey:UIImagePickerControllerEditedImage];
          // AND no good with the original image
  myUIImageView.image = [info objectForKey:UIImagePickerControllerOriginalImage];
          // AND no doing some other kind of assignment
  UIImage *myImage = [info objectForKey:UIImagePickerControllerEditedImage];

  [picker dismissModalViewControllerAnimated:YES];
  [picker release];
}

在所有这些情况下,图像都将为零.

In all of those cases the image will be nil.

然而,通过释放 UIImagePickerController 首先...

However, via the magic of releasing the UIImagePickerController first...

这行得通:

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

  [picker dismissModalViewControllerAnimated:YES];
  [picker release];

          // Edited image works great (if you allowed editing)
  myUIImageView.image = [info objectForKey:UIImagePickerControllerEditedImage];
          // AND the original image works great
  myUIImageView.image = [info objectForKey:UIImagePickerControllerOriginalImage];
          // AND do whatever you want with it, (NSDictionary *)info is fine now
  UIImage *myImage = [info objectForKey:UIImagePickerControllerEditedImage];
}

非常简单,但这就是全部.

Crazy simple, but that's all there is to it.

这篇关于didFinishPickingMediaWithInfo 返回 nil 照片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆