UIImage 返回零

Posted

技术标签:

【中文标题】UIImage 返回零【英文标题】:UIImage Returning nil 【发布时间】:2013-11-26 10:52:47 【问题描述】:

我正在将数据从一个控制器传递到另一个控制器。

TemplateController 是发送数据的那个,如下所示:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

     PreviewController *destViewController = [[PreviewController alloc]init];
     destViewController.passFrameLabel = [self.frameImages[indexPath.section] objectAtIndex:indexPath.row];
     [self.collectionView deselectItemAtIndexPath:indexPath animated:NO];
     [destViewController loadFrame];
     [self dismissViewControllerAnimated:YES completion:nil];

PreviewController 中的 loadFrame 方法如下所示:

UIImageView *frameImageView = [[UIImageView alloc] init];
[self.view addSubview:frameImageView];
self.frameImageView.image = [UIImage imageNamed:self.passFrameLabel];

调试后 self.passFrameLabel 包含正确的值,但 self.frameImageView.image 返回 nil。我错过了什么?

【问题讨论】:

self.passFrameLabel 的值是多少?您确定图像在您的捆绑包中吗?而且写法正确(注意大小写)? frameImageView的frame你设置了吗? @KIDdAe 是的,我的图片在我的捆绑包中。 self.passFrameLable 的值是文件名,一个在它的类(TemplateController)中实际正确显示的png文件 @visualication 你是什么意思? frameImageView 在头文件中声明为 UIImageView 属性(保留,非原子)。 模拟器中是否显示?? 【参考方案1】:

当您的类也具有 frameImageView 属性时,您似乎正在创建 frameImageView 本地对象。您将 UIImageView 的本地对象添加为子视图,但将 image 分配给属性(似乎没有初始化)。

你应该修改你的代码,

//frameImageView should be a strong property
_frameImageView = [[UIImageView alloc] init]; 
self.frameImageView.frame = CGRectMake(10,10,50,50); //Add suitable frame
//Now assign image
self.frameImageView.image = [UIImage imageNamed:self.passFrameLabel];
//Add this property as subview
[self.view addSubview:self.frameImageView];

试试看。

【讨论】:

@Amar,看起来非常接近。 self.frameImageView.view 也不返回 UIImage!但是当我使用手势识别器时,这个gestureRecognizer被“self.view”调用并且UIImage没有被显示但现在看起来很接近。 @Edu 对不起,但不太明白你在说什么。您的图像视图现在显示了吗?如果不能,您可以记录self.passFrameLabel 并尝试使用initWithContentsOfFile: 而不是imageNamed: API 分配和初始化UIImage @Amar 它不显示。 self.passFrameLable 返回 png 文件的全名,self.frameImageView.image 返回 UIImage。如果我使用 initWithContentsOfFile 我会得到同样的结果。一切都正确记录,但图像不显示。我在同一个视图控制器中有另一个 UIImage,这可能是个问题吗? @Edu 你能检查一下你的self.frameImageView 图像视图是否隐藏在另一个视图后面/重叠了吗?这可能是没有显示的原因。 @Amar 我有另一个图像视图,但我将两个图像视图放在不同的坐标上,这样它们就不会重叠。【参考方案2】:

首先 - 该文件名的图像是否存在于项目中,是否已检查以将其复制到该目标包中?

【讨论】:

是的。图像存在。实际上它显示在 TemplateController 中。 嗯,在这种情况下,只需检查 self.passFrameLabel 是否返回您预期的图像名称,除此之外我可能没有想法:(

以上是关于UIImage 返回零的主要内容,如果未能解决你的问题,请参考以下文章

将UIImage转换为NSData并返回UIImage

对 UIImage 进行像素化会返回具有不同大小的 UIImage

从 UIImage 返回子图像

UIImage 在将其转换为 CIImage,然后转换为 CGImage 并返回 UIImage 时失去其方向

加载图像异步并返回UIImage的公共函数

来自 UIImage 的编码字符串返回 null