2014-10-02 40 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()