@IBOutlet vars in Swift

时间:2014-10-02 16:00:22

标签: ios xcode swift var

我正试图在本教程here中快速制作todo应用程序,当我到达大约5分钟时,我运行应用程序并得到:

**由于未捕获的异常'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")

}

3 个答案:

答案 0 :(得分:1)

错误告诉您问题所在:您正在尝试使用键值编码来设置名为" khvj"的键的值。在没有名为" khvj"。

的键的对象上

所以问题不在你看的地方。

在你正在经过的某个地方寻找setValue(value:forKey:)的电话" khvj"作为关键参数。然后检查您正在调用该方法的对象是否具有名为" khvj"的属性。

如果你自己没有调用setValue(value:forKey:),那么它可能会被自动调用,作为从xib或storyboard文件加载的对象的一部分。检查以确保在你的xib或storyboard文件中你没有尝试将任何插座连接到一个属性" khvj"实际上并不存在。

答案 1 :(得分:0)

"此类不是密钥值编码兼容的密钥khvj"

这通常来自引用错误。例如,如果您意外地从一个标签或其他UI对象中有两个IBOutlet,则会使编译器混淆并导致错误。在故事板中选择对象后,进入实用程序面板并在Connections检查器上进行陈词滥用。它会告诉你出口。例如,查看一个标签是否有两个不同的插座。

答案 2 :(得分:0)

该错误通常意味着IBOulet存在问题,或IBAction与它们挂钩 - 通常是缺少连接或名称中的拼写错误。这是一个名为“khvj”的属性或方法的错误 - 无论在项目中的哪个地方......

本教程还使用UITableViewController&的自定义子类。其他ViewController - 您需要确保在故事板中正确设置自定义类,否则视图控制器将不知道它们应该包含自定义方法&你添加的网点。

最后,在~5:00之后的同一个教程中,您需要初始化UITextFields,否则当您尝试从中获取文本时它们不存在。使用显式!说“这绝对是一个非零的UITextField”,但如果它实际上是零,那就是一个问题。

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