【问题标题】:@IBOutlet vars in SwiftSwift 中的 @IBOutlet 变量
【发布时间】:2014-11-27 16:13:21
【问题描述】:

我正在尝试从本教程here 快速制作一个待办事项应用程序,当我到达 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")

}

【问题讨论】:

    标签: ios xcode swift var


    【解决方案1】:

    “这个类不符合键 khvj 的键值编码”

    这通常来自引用错误。例如,如果您不小心从一个标签或其他 UI 对象中获得了两个 IBOutlet,这会使编译器感到困惑,并且您会收到错误消息。在故事板中选择一个对象后,进入实用程序面板并单击连接检查器。它将向您显示网点。例如,查看一个标签是否有两个不同的出口。

    【讨论】:

    • 我刚刚检查过,它们都井然有序:/ 还有其他想法吗?
    • 如果您在情节提要视图中使用了错误的类命名,也可能发生这种情况。也许类名是 MyClass,但在实用程序检查器中,您将其列为 ViewController。但这是某种类型的引用错误。或者检查您是否没有缺少参考。
    • 如果你在 github 上发帖,我可以帮你查一下。
    • 给我几分钟
    • 如果你能看一看,那就太棒了!
    【解决方案2】:

    该错误告诉您问题所在:您尝试使用键值编码在没有名为“khvj”的键的对象上设置名为“khvj”的键的值。

    所以问题不在于你在寻找什么。

    在您传递“khvj”作为关键参数的地方寻找对setValue(value:forKey:) 的调用。然后检查您正在调用该方法的对象是否具有名为“khvj”的属性。

    如果您自己没有调用setValue(value:forKey:),那么它可能是作为从xib 或故事板文件加载对象过程的一部分而被自动调用的。检查以确保在您的 xib 或故事板文件中,您没有尝试将任何插座连接到实际上不再存在的属性“khvj”。

    【讨论】:

    • 我明白你的意思,我确实摆脱了一些我拥有的垃圾网点,但现在它说:“这个类不符合 key notesTestView 的键值编码。”再次
    • "notesTestView" != "notesTextView"。那是你的问题。
    • 基本上,每当运行时抱怨某个给定键的 KVC 不兼容时,您或 xib 反序列化机制都在寻找该对象上不存在的键。它要么是 IB 中的一个过时的出口,要么可能是您的拼写错误。
    • 就是这样。我觉得很傻:/非常感谢。
    • np。徒步穿越新森林时,总是很难知道哪棵树很重要!
    【解决方案3】:

    该错误通常意味着 IBOulet 或连接到它们的 IBAction 存在问题 - 通常是缺少连接或名称中的拼写错误。这是一些名为“khvj”的属性或方法的错误 - 无论项目中可能是什么......

    本教程还使用 UITableViewController 和其他 ViewController 的自定义子类 - 您需要确保已在情节提要中正确设置自定义类,否则视图控制器将不知道它们应该包含自定义您添加的方法和渠道。

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-14
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多