在OSX中绑定:类不是密钥值编码兼容的密钥{绑定名称}

And*_*rey 6 macos xcode binding xib swift

我试图按照BA Paris&Co的Learning Swift书(创建笔记应用程序)的说明,但面临以下绑定问题.我主要是在练习iOS编程,所以绑定概念对我来说是新的.

我做的步骤(尝试了xcode 9 beta 5和8.3.3):

  1. 创建OSX Cocoa应用程序(不使用故事板,基于文档的应用程序 - 文档扩展"测试",不使用核心数据)
  2. 将"var text = NSAttributedString()"添加到Document.swift
  3. 将NSTextView添加到Document.xib
  4. 在NSTextView的Bindings检查器中将"Attributed String"设置为File的所有者"self.text"(模型键路径)

我看到感叹号的概念"Xcode无法解析输入的密钥路径"构建成功,但是当我运行它时说"2017-09-03 22:17:40.739643 + 0200 test3 [6017:424072] [<test3.Document 0x6180000c3410> valueForUndefinedKey:]:此类不是键值文本的键值编码兼容."

我试图控制从Xib到Swift的拖动,它警告说"Xcode无法在当前工作空间中找到类Document".

我试图转换为工作区而不是proj,检查文件所有者,检查了与错误相关的stackoverflow线程 - 但他们最关心的是错误或非实际连接造成的一些连接(我可以删除连接,我知道什么连接是错的,问题是如何做到正确).到目前为止找不到解决方案.

提前致谢

Ken*_*ses 11

您需要text使用@objc属性声明属性,以使其可通过动态分派(如键值编码)访问.

此外,因为您希望通过键值观察(对于绑定)可以观察属性的修改,所以您需要告诉Swift始终动态地调度它的修改.因此,您还需要dynamic在声明中使用修饰符:

@objc dynamic var text = NSAttributedString()
Run Code Online (Sandbox Code Playgroud)