当架构设置为64位时,图片无法显示。

6

为了将我的应用转换为64位,我将架构构建设置更改为:

ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";

应用程序运行良好,除了一些图像没有显示出来(空白)。为什么会发生这种情况?有什么线索吗?


只有在64位运行时图像才无法显示吗?还是现在有些图像从未出现过?模拟器或设备或两者都有?我们需要更多信息,请更新问题。 - David H
我注意到大多数失败的图像都包括使用xib布局构建视图并通过代码分配图像的内容,其他包括那些在uibarbuttonitems上自定义的图像。 - Firdous
在Dropbox上发布一个带有这样一张图片的演示项目。我目前的猜测是,iOS中的图像解码代码可能是问题所在,以及可能存在编码不正确的图像。对于jpg格式的图像,iOS使用整数数组处理器,该代码非常复杂。 - David H
修复了,参见答案。 - Firdous
嗨@Firdous,我有同样的问题,这个解决方案对我没用。在iPhone 5上一切正常,但是在iPhone 6设备和模拟器上无法显示按钮图像和imageview图像。请给我任何解决方案。提前感谢您。 - Ilesh P
显示剩余7条评论
3个回答

13

答案在这里:

https://devforums.apple.com/message/922989#922989

我找到了原因。在一个视图控制器中,尽管该视图控制器还没有被分配,但是以下内容已经被实现(在.m文件的viewController实现之前):

@implementation UIImageView (UIScrollView)
- (void)setAlpha:(float)alpha {
..........(no difference if here is some code or not) ...............
  [super setAlpha:alpha];
}
@end

将上面提到的代码放入注释中解决了问题,即使未显示图像的按钮不在滚动视图中也是如此。


2
非常感谢!这帮我省了很多时间去追查问题。显然,我们也有一个类似的分类。 - bluebamboo
1
我猜测这个分类是来自这里:https://dev59.com/pnI-5IYBdhLWcg3wYXL8#8607393 - Reed Olsen
1
请注意,'alpha'是一个CGFloat,它在32位系统上是float,在64位系统上是double。上述类别在所有情况下将其声明为float。 - David H

4

根据64位的要求更新代码中使用的数据结构,例如用CGFloat替换Float(如果不起作用,还需将int类型改为NSInteger)。
点击此处了解更多信息
在我的情况下,将Float替换为CGFloat并解决了我的问题(最简单的方法是将float替换为CGFloat

#define float CGFloat

在.pch文件中编写代码,然后检查它是否正常工作。
谢谢。


3
它解决了我的问题,需要进行更改。
- (void)setAlpha:(float)alpha {

to:

- (void) setAlpha:(CGFloat)alpha {

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接