Xcode 4中的Cocoa绑定

daw*_*awg 13 macos objective-c interface-builder xcode4

Objective-c是可学习的; 可可是可以学习的; 我发现Interface Builder及其后代Xcode 4是完全不可思议的!没有文本(作为C或Obj-c源代码的等价物)来引用.所有描述都是"拖到这里;连接那个; Ctl拖到那里",我仍然迷路....

我一直试图通过关键技术的各种Apple示例.我一直在Apple开发人员的示例NSTableViewBinding中查看Cocoa Bindings和示例文件.为了尝试理解它,我一直试图复制它.

现在参考awakeFromNib文件MyWindowController.m中方法顶部的注释我如何在Xcode 4中建立这些连接???

在此输入图像描述

  1. Object调用TableArray的对象库或源代码中都不存在; 它来自哪里?

  2. Referencing Bindings右边; 这些是如何创造的?

  3. awakeFromNib方法顶部提到的各种键/值对; 这些是如何创造的?

我知道Xcode 4应该是一个更直接的改进,但我对IB的替换感到非常困惑.网上的所有IB资料都指的是完全不同的早期版本,所以我找不到太多帮助.

跟进

我确实成功地在Xcode 4中找出了Cocoa Bindings.我能够在几行代码中复制示例程序的功能.

以下是我花了一段时间才弄明白的问题:

  1. TableArrayArray Controller Object从对象库拖到XIB中的对象列表,然后重命名.(Apple注意:在右键单击HUD视图中,基础对象类会很好)

  2. Stephen Poletto的答案是连接它的宝贵指南.

  3. 我没有立即明白连接界面如何在右键单击HUD中工作: 图2

  4. 存储阵列myContentArray隐含在实例化中Array Controller Object

  5. 单击并从TableArray的HUD拖动到.h文件中的AppDelegate定义,以在那里创建连接.

Ste*_*tto 13

要建立awakeFromNib注释中描述的绑定:

  1. TableArray是一个NSArrayController.在Interface Builder文档的最左侧,您将看到一个大纲视图,显示您的笔尖中包含的所有对象.在运行时加载此nib时,将取消归档和实例化所有对象.在您提供的屏幕截图中,您将看到名为"TableArray"的NSArrayController已经存在.如果由于某种原因需要创建另一个,则将NSArrayController从对象库(右下角)拖到Interface Builder文档中.
  2. 在Interface Builder中选择"Last Name"表列.您可以通过在大纲视图中按下显示三角形来执行此操作,直到您看到"表格列 - 姓氏"或直接在IB的主画布区域中选择它.检查员(在Xcode窗口的右侧)现在将反映有关姓氏列的详细信息,因为它是当前选定的对象.选择绑定检查器.您可以将鼠标悬停在检查器顶部的图标上,直到找到标记为"显示绑定检查器"的图标 - 它是右侧的第二个图标.绑定检查器为您提供所选NSTableColumn的所有公开绑定的列表.你会看到"Value"就是这样一个绑定 - 这就是我们想要根据MyWindowController.m建立的绑定.旋转"值"旁边的显示三角形以显示所有绑定细节.
  3. 您现在可以指定控制器,通过该控制器可以建立要使用的绑定和控制器/模型键路径.继续检查"绑定"复选框,然后从"绑定到:"弹出按钮中选择"TableArray".然后,将"arrangeObjects"指定为控制器键,将"firstname"指定为模型键路径.
  4. 您会注意到输入"firstname"会导致Xcode使用工具提示"Xcode无法解析输入的密钥路径"来显示灰色警告图标.Xcode将尝试解析您输入的密钥路径.因此,如果您通过包含Person类对象的NSArrayController绑定,并且Person类定义了一个名为"address"的属性,则"arrangeObjects.address"将适当地解析,Xcode将验证您的keypath是否正确.但是在这个例子中,数组控制器正在管理NSDictionary对象,并且Xcode无法知道您在这些字典中存储了哪些键/值对.作为开发人员,您应该知道存储在NSArrayController中的字典确实包含"firstname"/ value对,因此您可以忽略该警告.
  5. 重复MyWindowController.m顶部列出的其他绑定.

连接检查器的引用绑定部分显示已通过所选控制器建立的所有绑定.因此,如果您选择TableArray并导航到连接检查器,您现在将看到"arrangeObjects.firstName" - > Value,Table Column - First Name.这向您展示了您刚刚建立的绑定.

在深入研究像Cocoa Bindings这样的高级主题之前,习惯使用Interface Builder可能是值得的.使用它来创建IBOutlet和IBAction连接,本地在IB内部以及IB和源代码之间.习惯使用检查器来修改UI对象的属性等.一旦您对IB的一般工作流程感到满意,处理绑定将更容易.这是一个帮助指南.