2015-02-05 138 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給出的答案之一將其添加到您的項目中。