2014-10-02 77 views
1

我試圖在迅速待辦事項應用從本教程here當我到達一根繞5分鐘大關,我運行應用程序,並得到:@IBOutlet瓦爾斯威夫特

**終止應用程序由於未捕獲異常'NSUnknownKeyException',原因:'[setValue:forUndefinedKey:]:這個類不是關鍵notesTestView編碼兼容的鍵值。'

我已經看到一些其他用戶得到這個,但沒有解決方法已經變得明顯。我一直在尋找大約三天的時間來試圖解決這個問題。

它與titleTextField和notesTextView變量有關。每當我使用'!'時在聲明它們時,當我點擊應用程序中的「+」時,Xcode會給我這個錯誤。如果我不使用'!',Xcode不會讓我編譯。如果我不使用'?'或'!',Xcode不會讓我編譯。有什麼想法嗎?

我想如下(Xcode中默認)來聲明變量:

@IBOutlet var titleTextField: UITextField! 
@IBOutlet var notesTextView: UITextView! 

和訪問他們像這樣:

@IBAction func addButtonTapped(sender: AnyObject) { 

    var dataSet:NSMutableDictionary = NSMutableDictionary() 
    dataSet.setObject(titleTextField.text, forKey: "itemTitle") 
    dataSet.setObject(notesTextView.text, forKey: "itemNote") 

} 

回答

1

該錯誤告訴您問題所在:您正試圖使用​​鍵值編碼在沒有名爲「khvj」的鍵的對象上設置名爲「khvj」的鍵的值。

所以問題不在於你在找什麼。

尋找一個電話setValue(value:forKey:)某處你傳遞「khvj」作爲關鍵參數的地方。然後檢查您調用該方法的對象是否具有名爲「khvj」的屬性。

如果你自己沒有調用setValue(value:forKey:),那麼它可能會被自動調用爲從xib或storyboard文件加載的對象的過程的一部分。請檢查以確保在xib或storyboard文件中不會嘗試將任何網點連接到實際上不再存在的屬性「khvj」。

+0

我明白你的意思了,我確實擺脫了一些我曾經擁有過的垃圾店,但現在它說:「這個類別不是關鍵的NotesTestView編碼的關鍵值編碼。」 – mpkostek 2014-10-02 17:05:11

+0

「notesTestView」!=「 notesTextView」。那是你的問題。 – algal 2014-10-02 17:07:12

+0

基本上,只要運行時抱怨某些鍵不符合KVC標準,那麼無論是您還是xib反序列化機制都在尋找該對象上不存在的鍵。它可能是一個陳舊的出口掛在IB,或者你可能拼錯了。 – algal 2014-10-02 17:08:43

0

「這一類不是鍵值編碼兼容的密鑰khvj「

這通常來自引用錯誤。例如,如果您不小心從一個標籤或其他UI對象中獲得了兩個IBOutlet,則會使編譯器感到困惑,並且會出現錯誤。在故事板中選擇一個對象後,進入實用程序面板並在連接檢查器上進行循環。它會告訴你的網點。例如,查看一個標籤是否有兩個不同的出口。

+0

我剛纔檢查過,他們都是爲了:/任何其他的想法? – mpkostek 2014-10-02 16:24:36

+0

如果您有錯誤的類名爲fir故事板視圖,也會發生這種情況。也許類名是MyClass,但在實用程序檢查器中,它將它列爲ViewController。但是這是某種類型的引用錯誤。或者檢查你是否沒有缺失的參考。 – 2014-10-02 16:50:38

+0

如果你發佈到github上,我可以看看併爲你找到它。 – 2014-10-02 16:51:13

0

這個錯誤通常意味着IBOulet或IBAction存在問題,這些問題通常是缺少連接或名稱中的拼寫錯誤。這是一個錯誤的一些屬性或方法稱爲「khvj」 - 無論在哪裏可能在項目中...

該教程還使用自定義子類的UITableViewController &其他ViewController - 你需要確保你已經設置在故事板中正確定製類,否則viewcontrollers不會知道它們應該包含您添加的自定義方法&。

最後,在~5:00的相同教程之後,您需要初始化UITextFields,否則當您嘗試從它們獲取文本時,它們不存在。使用明確的!說「這絕對是一個非零UITextField」,但如果它實際上是零,這是一個問題。

@IBOutlet var titleTextField: UITextField = UITextField() 
@IBOutlet var notesTextView: UITextView = UITextField()