【问题标题】:UIImage not being displayed in UIImageView on iPhone5, yet works in simulatorUIImage 未显示在 iPhone5 上的 UIImageView 中,但在模拟器中有效
【发布时间】:2013-06-09 20:09:32
【问题描述】:

我对 iPhone 开发比较陌生,但我已经做了 20 年以上的 Windows 程序员。

我最近被要求开发一个应用程序,它可以读取外部传感器数据,创建内存热图图像,然后将图像渲染到屏幕上。

Xcode v4.6.2 - iOS 6.1 模拟器/iPhone 5。

(经过一番努力)我成功了。在模拟器上,传感器被读取,图像文件被构建并从我的库中作为 CGImageRef 返回。然后,我使用以下代码将其加载到我的视图控制器中的 UIImageView 对象中。像这样:

// Line edited to remove transcription error
CGImageRef cgimg = [sensor getSensorImage : 200 : 200]; 
UIImage* image = [UIImage imageWithCGImage : cgimg];

imageView.image = image;

这在 6.1 模拟器中运行良好,热图看起来正确并呈现到屏幕上。当我连接 iPhone 5 并在其上运行时,什么都没有呈现。 UIImageView 保持灰色。我找不到任何错误,也没有抛出异常。图片对象不为空,所有代码行都执行成功。

调用 setNeedsDisplay 似乎也无济于事。

这几天我一直在摸不着头脑。

有没有可能:

(a) 硬件配置文件不完整?或者 (b) 当我在硬件上运行时,视图中的 UIImageView 以某种方式与代码引用断开连接?

【问题讨论】:

  • CGIImageRef 本身就是一个指针,所以这里 CGIImageRef* cgimg asterics 不是必需的。在最后一行中,您尝试不使用 CGIImageRef 而是使用指向 CGIImageRef 的指针来初始化 UIImage。编译器应该对此抱怨。注意编译器警告。
  • 你拼错了 CGIImageRef,应该是 CGImageRef!
  • 你应该有这个编译器警告'不兼容的指针类型发送'CGImageRef *'(又名'struct CGImage **')到类型'CGImageRef'(又名'struct CGImage *')的参数;使用 *' 取消引用,前提是您已更正 CGIImageRef 的拼写。
  • 谢谢,我将检查编译器警告,并重新检查我的方法的返回类型。 ...并更新拼写。 (我不得不手动转录所有内容,因为我工作地点的 Mac 没有连接到网络)。
  • 哎呀,这实际上是我的转录错误,当我构建代码时没有警告 - 所以我去寻找警告设置的级别。我将编辑上面的代码并删除“*”。虽然它仍然无法在硬件上运行:(

标签: iphone ios xcode uiimageview ios-simulator


【解决方案1】:

事实证明(使用 Apple 的说法)这是我的一个取消分配错误。

在图像创建例程结束时,我试图释放所有用于构建图像的资源,只留下最终图像本身。

其中之一是中间图像的像素缓冲区。一旦我删除了它的 dealloc,图像就开始出现在 iPhone 上。

我已经运行该应用程序几个小时,没有任何内存泄漏迹象。我猜 ARC 正在处理它。

奇怪怎么没有报告错误或警告。

只是模拟真实硬件之间的众多区别之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    相关资源
    最近更新 更多