2015-05-07 39 views
0

我對iOS平臺很陌生,但我已經是一個實驗性的Android開發人員。EXC_BAD_ACCESS當在Swift中加載UIImage時

我在Swift中遇到了一個奇怪的問題,我們無法在Objectice-C中重現。我們正在手動設計我們的接口,而無需使用Interface Builder,以獲得更大的靈活性。

我們在我們自定義的UIViewController中提到的行上得到了一個EXC_BAD_ACCESS。雖然這個問題似乎在StackOverflow上多次提出,但我還是沒有找到使用Swift編寫的解決方案,或者解決方案工作正常並且存在類似的問題。

override func viewDidLoad() { 
    super.viewDidLoad() 

    var logo:UIImage = UIImage(named: "sgLogo")! --> EXC_BAD_ACCESS 
    var sgLogo:UIImageView = UIImageView(image: logo) 

    // other UI elements, + constraints 
    [...] 
} 

我得到的唯一元素是堆棧跟蹤,Xcode下面欄中的調試器視圖是空的。根據該堆棧跟蹤,UIImage似乎被實例化:存在地址。

sgLogo圖像是位於項目文件夾結構而不是Images.xcassets中的png圖像。我試圖在圖片資源中指定它,但我仍在嘗試相同的問題。指定擴展名也沒有幫助。

如果需要,我可以提供更多的代碼片段。

任何幫助,非常感謝。

+0

只需將圖像添加到您的圖像資產和mame它sgLogo –

回答

0

我成功地解決了這個問題。我重寫了我的UIViewControllerloadView方法,但未調用父級方法。問題解決了。

0

看起來你的圖像無法找到。檢查圖片的目標。現在,您可以通過刪除感嘆號來解決問題。如果你像這樣強制解包並且圖像不在那裏,你的應用就會崩潰。所以你可以這樣做:

override func viewDidLoad() { 
    super.viewDidLoad() 

    var logo = UIImage(named: "sgLogo") 
    if let logo = logo { 
     let imgView = UIImageView(image: logo) 
    } else { 
     //image is nil 
    } 

    // other UI elements, + constraints 
    [...] 
} 
+0

你應該只是使用,如果讓,以確保它不是零。刪除!沒有解決問題 –

+0

該圖片確實存在於項目中,我已經刪除了驚歎號以確保它正確,但是在這種情況下,xcode拒絕編譯並顯示以下錯誤消息:「可選類型UIImage的值?」沒有解開。「 – wget

+0

wget UIImage(命名:)它僅適用於位於圖像資產中的圖像 –

相關問題