最简单的Cocoa绑定例子

The simplest Cocoa Binding example

我想对 Cocoa 绑定有一个基本的了解,我想创建一个非常简单的项目。我有一个 class Person,它有一个类型为 NSString 的变量 name。以下是我希望事情如何运作:

  1. 用户在文本字段中输入姓名并按下 "Update name" 按钮
  2. 文本字段中的字符串保存到 Person class.
  3. 的实例
  4. 绑定到Person Controller(绑定到Personclass)的标签根据Personname变量自动改变其值]实例。

我花了几个小时阅读各种教程和 Apple Mac 开发人员库,但每个示例都只展示了如何使用表获得 Cocoa 绑定。当我尝试开发更简单的东西时,我觉得自己完全迷失了。我已经创建了一个基础项目,唯一剩下的就是进行所有绑定。我恳请为我建立所有联系,并希望给我一个解释。 https://www.dropbox.com/sh/6hddfxyitqp6uoc/AACgaRhKBhLo6EXCVN9W6GQua?dl=0 该项目是一个基于文档的应用程序,因为我将来会开发这种类型的应用程序。

您的项目无法运行的原因有多种,因此让我们重新开始并创建最简单的 Cocoa 绑定示例。

  1. 创建一个新的 Xcode 项目,选择 Cocoa 应用程序,不要勾选 "Use Storyboards"、"Create Document-Based Application" 或 "Use Core Data"。
  2. Select MainMenu.xib、select window 并添加文本字段和标签。
  3. 向 xib 添加对象控制器。打开 Prepares Content
  4. 将文本字段绑定到对象控制器:将 Value 绑定到 Object Controller、控制器键 selection 和模型键路径 name
  5. 将标签绑定到对象控制器:将 Value 绑定到 Object Controller、控制器键 selection 和模型键路径 name
  6. 构建,运行,测试。输入一些文本并点击 Return。

控制器自动创建一个 NSMutableDictionary 的实例,每个键都符合 KVO。当Text Field的内容改变时,Text Field的绑定调用setValue:@"New Contents" forKey:@"name"。这通知标签的绑定和标签被更新。

为什么你的项目不起作用:

  • 在xib中,Object Controller的内容是和文档相关联的。 controller 的内容应该是 Person,而不是 Document。这就是为什么你得到 [<Document 0x618000100750> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.。删除此连接。
  • Class 人不符合 KVO。当名称更改时,class Person 不会发出更改通知,绑定也不会注意到更改。这可以通过对 name 使用 属性 而不是 ivar 来解决。您不必使用 setValue:forKey: 来更改代码中的名称,person.name = [field stringValue] 就可以。
  • Object Controller的内容在文档的init方法中设置。这还为时过早,xib 尚未加载且控制器不存在。在windowControllerDidLoadNib中设置内容。我会使用 setContent 而不是 addObject,但 addObject 应该有效。