2015-02-05 93 views
1

我想加载一个.PNG图像位于我的XCode项目UIImage - 但构造函数UIImage需要文件名返回nil无法加载PNG图像作为UIImage

请参阅我的设置截图:

enter image description here

这里还有一些细节:

  • 该项目是斯威夫特
  • 我构建UIImage在全局变量(lazyly )
  • 问题出现在模拟器和设备上(iPhone 5S)
  • 我有不同的名称添加相同的图像多次,以确保不正确的命名是不是原因(见左冲rectange所有的名字)
  • 所有图像添加到EasyTypeShared目标,这是嵌入到一个库项目可以打造的EasyType项目。
  • 我没有做任何axtra步骤 - 刚才添加的图像文件到我的工作区(和EasyTypeShared目标),并运行应用程序

编辑:根据this blog的原因可能是工作区设置 - 更精确地说图像是由框架加载的。不知道,但缺乏更好的想法,我会遵循这个轨道。如果你能对这个问题提出一些看法,我会非常感谢任何想法。

+1

仅仅因为你可以在Xcode中看到文件并不意味着它在你的包中。 – 2015-02-05 20:34:17

+0

@HotLicks我需要做些什么才能将它添加到包中?我认为用这个特殊的'UIImage'构造函数不需要额外的步骤(比如将其加入到包中)。 – drasto 2015-02-05 20:39:01

+0

选择图像并确保图像具有在“文件”检查器中选择的“目标成员资格”。 – augustzf 2015-02-05 21:39:31

回答

2

该问题是由于代码从资源加载图像驻留在框架中导致的。主包不包含框架的资源,需要使用相应的包。工作代码:

private let imagePlaceholder = UIImage(named: "ImagePlaceholder.png", inBundle: NSBundle(forClass: CarretMoveController.self) 
0

在您的项目资源管理器中我可以看到图像没有正确命名。 它应该是这样的:

imagePlaceHolder.png 
[email protected] 

通知PNG在文件名的末尾,并@ 2个文件扩展名之前。

+0

只是重命名为'ImagePlaceholder @ 2x.png'似乎不是上班。 @HotLicks写了一些关于将其添加到bunde的东西。也许这是问题? – drasto 2015-02-05 20:46:31

1

这些是images.xcassets的一部分吗?如果不是,他们将不得不使用NSBundle读取并获取资源的路径/ URL,所有这些以及一个简单的文件名都不够用。

您可以按照Apple文档here将文件添加到资产。相关部分可能是'添加图像集'之一。

如果您没有images.xcassets,可以按照here给出的答案之一将其添加到您的项目中。