UIImage imageNamed返回nil

arn*_*orn 46 xcode uiimage imagenamed ios

我是iOS和Xcode的新手.

我尝试加载图像

[UIImage imageNamed:@"imageName.png/jpg and so on"];
Run Code Online (Sandbox Code Playgroud)

但它只返回零.图像应该在我的项目包中,考虑到我可以从InterfaceBuilder中的拖放菜单中选择它,并通过"添加文件到"项目名"..."菜单将其添加到Xcode中.

我使用.png或.jpg图像没有区别,结果保持不变:它们通过IB工作,但如果我尝试自己运行imageNamed方法则不行.

Mat*_*son 88

只有几个原因可以使用imageNamed来恢复图像:

  • 图像不在您的包中.确保图像实际上在您的项目中.确保通过单击文件并选择其所属的目标来检查目标.

  • 您的图像名称拼写不正确或扩展名有问题.

  • 您正在使用视网膜显示器,但没有@ 2x图像.尝试将模拟器更改为视网膜,看看它是否显示出来.

  • 如果使用资产目录,请确保在属性检查器中选择了正确的设备.

一些技巧:

如果您正在使用模拟器进行测试,请从模拟器中删除应用程序并清理项目,然后重新运行.如果它仍然出现,它应该显示在你的手机上(如果它不是它可能是文件名或@ 2x版本的问题).

如果您在手机上进行测试并且没有显示,请确保使用相同版本的模拟器(如果您有iPhone 4/4s,请确保使用带有视网膜的4/4s模拟器).

根据这篇文章的最后一件事:JPG图像没有加载UIImage imageNamed某些JPG类型使用imageNamed并且没有扩展名存在一些问题.IMO,你应该使用PNG,因为iOS为你压缩它们,除非你只需要使用JPG.

  • 我不得不删除该应用程序,但仅此一项并未解决问题.做完产品 - >清洁后,我能够看到正确的图像 (4认同)

Dam*_*amo 17

Re Mike Weller的评论.复选框是......

在此输入图像描述


Kof*_*Kof 14

就我而言,PNG格格不入.

出于某种原因,Xcode预览显示正确,但是当我尝试使用UIImage加载它时,它返回nil.


clo*_*ith 9

我刚刚在磁盘"file.jpg"上命名的jpg文件有这个问题

我试图加载没有扩展名,只是@"文件".虽然这适用于pngs,但它不适用于jpg.一旦我使用@"file.jpg",它就有效了!


Tra*_* M. 7

如果您验证了上述所有内容并且发现您的UIImage(名称为"myImage")从您正在构建的动态框架内的代码返回nil ,那么您必须将代码更改为:

UIImage(named: "myImage", in: Bundle(identifier: "com.myframework.name"), compatibleWith: nil)
Run Code Online (Sandbox Code Playgroud)

这应该正确地从CXAssets中检索资产.

  • 在处理动态框架时,这节省了我的一天.我添加了一个类方法来简化包检索:`+(NSBundle*)currentBundle {static dispatch_once_t predicate = 0; static NSBundle*myBundle = nil; dispatch_once(&predicate,^ {myBundle = [NSBundle bundleWithIdentifier:@"yourbundle.identifier"];}); 返回myBundle; }` (2认同)

emr*_*tci 5

雨燕5

如果在动态框架中得到 UIImage nil,则应该使用包标识符设置图像。

您可以像这样创建 Bundle 的扩展;

或者

你可以这样使用;

UIImage(named: "myImageName", in: Bundle(for: type(of: self)), compatibleWith: nil)
Run Code Online (Sandbox Code Playgroud)

我认为第一个更有用,因为它比第二个更具可读性。