2016-07-22 51 views
-1

即時得到這個錯誤:意外地發現零 - 「的setText」 - 斯威夫特/ Watchkit

fatal error: unexpectedly found nil while unwrapping an Optional

...當我嘗試更改接口控制器標籤文本,調用從通知控制器功能,當收到通知。這就是我的代碼:

InterfaceController.swift

func test() { 
    patt.setText("testtesttest") 
} 

NotificationController.swift

let controller = InterfaceController() 
override func didReceiveRemoteNotification(remoteNotification: [NSObject : AnyObject], withCompletion completionHandler: ((WKUserNotificationInterfaceType) -> Void)) { 
    controller.test() 
    completionHandler(.Custom) 
} 

當我刪除的功能,爲什麼不打印工作正常,那麼錯誤消失的setText工作?當我將其設置爲「testtesttest」時,它怎麼會是零?

編輯:錯誤是由拋出:的setText( 「testtesttest」)

提前感謝!

+2

可能的重複[什麼是「致命錯誤:意外地發現零,而解包可選值」是什麼意思?](http://stackoverflow.com/questions/32170456/what-does-fatal-error-unexpectedly-found-無包雖然解開一個可選的價值) – 2016-07-22 15:45:33

+0

@PetahChristian我問的問題是不同的那一個你認爲它的重複...我編輯它是更具體的 – BloodWoork

+0

這並沒有什麼不同。你的崩潰發生是因爲你的'patt'隱式解包可選項爲零,並且被僞指針覆蓋。 – 2016-07-22 16:01:17

回答

1

你的錯誤從這裏開始:

let controller = InterfaceController() 

實例化一個接口控制器。然而它沒有從故事板實例化,所以它的銷售點不會被連接到任何場景。

然後,您嘗試訪問一個從未連接到任何文本標籤的隱式解包可選出口,並且程序合理崩潰。

這是由「隱式解開的optionals」下的複製目標覆蓋的。

+0

好的,我應該在哪裏實例化控制器? – BloodWoork

+0

這是一個完全不相關的問題。我建議先研究一下,然後再發佈一個新問題,看看其他人是否已經*問過或回答過這個問題。 – 2016-07-22 16:04:38

1

試試這個:

fun test() { 
    guard patt != nil else { 
    print("patt doesn't exist!") 
    return 
    } 
    patt.setText("testtesttest") 
} 

賠率是patt爲零。等到awakeFromNib已被呼籲去尋找任何網點。 另外,既然你說這是來自一個通知,將set text包裝在一個調度塊中,以便將它放在主線程中。