UIImageView不显示来自UIImagePickerController的图像

我想用我的应用程序拍照,然后显示在我的.xib预定义的UIImageView中。 我有一个IBOutlet UIImageView * _foto链接到.xib中的UIImageView

当我做下面的事情后,图片不会显示在UIImageView拍照后:

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { _foto.image = image; //Also tried set image, and resizing the image first [self dismissModalViewControllerAnimated:YES]; } 

现在,当我添加代码来创build一个新的图像视图与从我的select器返回的图像,并将其作为一个子视图添加到我这样的视图,发生了一些奇怪的事情:

 - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { UIImageView *iv = [ [UIImageView alloc] initWithImage:image]; [self.view addSubview:iv]; [iv release]; _foto.image = image; [self dismissModalViewControllerAnimated:YES]; } 

现在图像显示在我的视图的左上angular新创build的图像视图,如预期,但也在我的_foto UIImageView。 这让我非常困惑,我不知道发生了什么,我只知道这不是我所期望的行为。 有没有人有任何线索,并希望为这个问题妥善解决?

UIImagePickerController在拾取图像的同时获取大量的设备内存。 在- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo我已经注意到多次内存警告级别1和2.它可能会导致强制卸载并重新加载视图,启动你的视图控制器的viewDidLoad方法再次。 如果你的_foto对象是一个IBOutlet,它将被从内存中移除,并重新加载所有属性的起始值(图片)。 另外,如果你在viewDidLoad中设置图像为零,这可能是一个原因。

把一些NSLog到viewDidLoad检查它是否重新启动。 您也可以尝试将捕获的图像放入库中 – 如果图像中存在图像,则问题可能是在卸载。

ArturOzierański的回答是部分正确的。

如果您使用viewDidLayoutSubviews()来configuration布局,当拾取器消失时会被调用,所以如果您在viewDidLayoutSubviews()中设置了默认图像,您将重置为默认图像。

在viewDidLoad中configuration默认​​图像。