2016-08-22 45 views
0

我有我的ViewController,我這樣定義我的按鈕:的iOS:「發現零而展開的可選值」在UIButton的

@IBOutlet weak var myButton: UIButton! 

viewDidLoad我將它藏在這樣:

myButton.hidden = true  

在iOS系統9都可以在iOS 8的我得到這個錯誤:

fatal error: unexpectedly found nil while unwrapping an Optional value

我在哪裏錯了?我試圖檢查所有的插座參考,這一切都ok ...我也嘗試連接和斷開它,但我找不到錯誤

+0

嘗試,而不是投入'viewDidLoad',放在IBOutlet中的'didSet',看看它是否解決了,關於你的bug然後我不知道 – Tj3n

回答

-1

最明顯的答案通常是正確的答案:變量是nil。什麼會導致這在iOS 8而不是iOS 9上成爲現實?它必須是SDK或運行時環境的差異。

如果您在viewDidLoad中遇到此問題,那麼您的按鈕可能已被釋放。如果我冒險猜測,我懷疑你的按鈕不是視圖層次結構的一部分(至少暫時),並且正在被釋放。這將解釋所有的症狀。

如果您要添加和刪除按鈕,則應使出口strong(默認值)而不是weak

+0

你是完全正確的。 你能解釋一下你的意思是我的按鈕不是視圖層次結構的一部分嗎? – CrazyDev

+0

簡而言之,視圖層次結構就是根窗口中包含的內容。當你的視圖控制器可見時,它是root'view',它的所有子視圖都在視圖層次結構中。這很重要的原因是每個視圖都保留了它的子視圖,以防止它們被釋放。一旦你調用'removeFromSuperView',它們就會被釋放。如果沒有其他東西能夠保留它們(比如強大的出口),它們將被釋放。 – Holly

+0

爲什麼這個投票被拒絕?如果您覺得答案足夠糟糕,可以反饋意見。 – Holly

-3

你必須安全地解開它! 做這樣的事情:

func hideOrNot()->Bool{ 
    var trueorfalse=someBoolValue //that is pulled from whatever decides if it will be shown or not 
     if trueorfalse != nil{ 
     if let myBool=someBoolValue{ 
      return myBool as! Bool 
     } 
    } 
    else { 
     return true 
    } 
    return true 

    } 

如果您需要進一步幫助發佈您的代碼

+0

首先,在原始問題中,他們是否打開了不安全的東西?沒有提到這一點。其次,爲什麼你需要一個13行的函數來返回這麼簡單的東西? 'someBoolValue'從哪裏來?另外,爲什麼這是必要的?問題中的錯誤與bool值沒有任何關係。 – Aaron

+0

「iOS:」在解包可選值時發現爲零「。關於.hidden依賴於的內容,op提供的信息非常有限,如果依賴於其他內容的結果,我的函數將處理該內容。iE someBoolValue來自無論決定按鈕是否應該隱藏,操作系統給隱藏的屬性一個布爾值,並且你說這與布爾沒有任何關係,假設你希望在用戶使用後隱藏該按鈕的場景10'的應用程序,我發佈的內容會覆蓋它.. – Do2

+0

讓我們[在聊天中繼續討論](http://chat.stackoverflow。COM /間/ 121561 /討論之間,亞倫和-DO2)。 – Aaron

0

添加這些東西,我解決了:

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { 
     super.init(nibName: "MyViewController", bundle: nil) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
相關問題