Xcode 4中的Cocoa绑定

13

Objective-C是可以学习的;Cocoa也是可以学习的;但我发现Interface Builder及其后代Xcode 4完全难以理解!没有文字(类似于C或Obj-c源代码)可供参考。所有说明都是“拖放这里;连接那里;Ctrl拖放那里”,我仍然感到迷失……

我一直在尝试使用各种苹果关键技术的示例。我一直在学习Cocoa Bindings和示例文件中的NSTableViewBinding,为了理解它,我一直在尝试复制它。

现在参考一下文件MyWindowController.mawakeFromNib方法顶部的注释。我该如何在Xcode 4中创建这些连接?

enter image description here

  1. 名为TableArrayObject既不在对象库中,也不在源代码中;它来自哪里?

  2. 右侧的Referencing Bindings如何创建?

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

我知道Xcode 4应该是更为简单的改进,但我对IB的替代品感到非常困惑。所有网上有关IB的资料都是关于完全不同的早期版本的,因此我找不到太多帮助。

补充说明:

我成功地在Xcode 4中理解了Cocoa Bindings。我能够用几行代码复制示例程序的功能。

以下是让我花费一些时间理解的问题:

  1. TableArray 是从对象库拖动到XIB中的Objects列表中,然后重命名的Array Controller Object。(对Apple的建议:在右键HUD视图中放置一个基类对象会很好)

  2. Stephen Poletto 的回答是连接所有内容的宝贵指南。

  3. 我一开始并不清楚如何在右键HUD中连接接口: figure 2

  4. 存储数组myContentArray隐含在Array Controller Object的实例化中。

  5. 从TableArray的HUD中拖动并放置到AppDelegate的.h文件定义中即可创建连接。


4
我能感受到你的痛苦,也分享你的困惑... - the wolf
2个回答

13
为了建立awakeFromNib评论中描述的绑定关系:
  1. TableArray是一个NSArrayController。在Interface Builder文档的最左边,你会看到一个轮廓视图,展示了nib文件中包含的所有对象。当这个nib文件在运行时被加载时,所有的对象都会被解档和实例化。在你提供的屏幕截图中,你可以看到名为“TableArray”的NSArrayController已经存在。如果出于某些原因需要创建另一个,你可以从对象库(右下角)拖拽一个NSArrayController到Interface Builder文档中。
  2. 在Interface Builder中选择“Last Name”表格列。你可以通过在轮廓视图中按折叠三角,直到看到“Table Column - Last Name”,或者直接在IB的主画布区域中进行选择来完成此操作。检查器(Xcode窗口的右侧)现在将反映有关姓氏列的详细信息,因为它是当前选定的对象。选择绑定检查器。你可以在检查器顶部的图标上悬停,直到找到标记为“显示绑定检查器”的图标——它是靠右边的第二个。绑定检查器会向你显示所选NSTableColumn的所有公开绑定的列表。你将看到“Value”是其中之一,那就是我们根据MyWindowController.m要建立的绑定关系。扭动“Value”旁边的折叠三角,以显示所有绑定细节。
  3. 现在,你可以指定要建立绑定关系的控制器及其使用的控制器/模型关键路径。勾选“Bind”复选框并从“Bind to:”弹出菜单中选择“TableArray”。然后,将“arrangedObjects”指定为控制器关键路径,“firstname”作为模型关键路径。
  4. 你会注意到输入 "firstname" 后,Xcode 会出现一个灰色警告图标并显示工具提示 "Xcode cannot resolve the entered keypath." Xcode 将尝试解析您输入的键路径。因此,如果您通过包含类 Person 的对象的 NSArrayController 进行绑定,并且类 Person 定义了一个名为 "address" 的属性,则 "arrangedObjects.address" 将适当地解析,并且 Xcode 将验证您的键路径是否正确。但是在这个例子中,数组控制器正在管理 NSDictionary 对象,并且没有办法让 Xcode 知道您在这些字典中存储的键/值对。作为开发人员,您应该知道存储在 NSArrayController 中的字典确实包含 "firstname"/value 对,因此您可以忽略警告。
  5. 重复上述步骤完成 MyWindowController.m 中列出的其他绑定。

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

在深入像 Cocoa Bindings 这样的高级主题之前,熟练使用 Interface Builder 可能是值得的。使用它创建 IBOutlet 和 IBAction 连接,原生在 IB 中和在 IB 与源代码之间。熟悉使用检查器修改 UI 对象的属性等。一旦您熟悉了 IB 的一般工作流程,处理绑定将更容易。这里提供了一个指南来帮助您。


我实际上花了相当多的时间来熟悉IBOutletIBAction,并编写了10个带有按钮、NSScrollView和NSTextView的微不足道的应用程序。只是这里的学习曲线不是线性的。对我来说,这是另一个陡峭的部分... - dawg
这对我来说是非常清晰的教程。谢谢!!! 使用NSArray作为NStable的数据源在概念上非常优雅和清晰。但在IB中连接它对我来说不是那么清晰... - dawg
问题:有没有一种方法可以查看从IB中收集的文本绑定、连接和检查器设置列表?例如,如果我打开一个从Apple下载的项目,类和方法非常清晰。要理解IB如何配置各种对象,我只需要单击所有不同的检查器或者可以点击X并获取列表吗?如何查看和理解其他人组装的XIB文件? - dawg
这是我找到的最易懂的教程。再次感谢!!!我正在慢慢地掌握它... - dawg
@drewk - 很高兴我能帮到你。在xib中,没有“全面视图”来显示所有存储的连接。要查看已经建立的连接,您需要浏览xib中的各种对象,并查看连接检查器。 - Stephen Poletto

1

Xcode 4中现在已经集成了Interface Builder部分,就底层概念而言,与旧的Interface Builder并没有太大的区别。

您可以在苹果网站上下载仍然可用的XCode 3,并按照在线教程进行操作。

或者,比我更有帮助的人可能会使用Xcode 4编写一个不错的教程...

话虽如此,让我试着解释一些事情。(但是我真的建议您目前使用Xcode 3。我并不是说Xcode 3本质上更好;我只是说Xcode 3有更多的教程,这样您就可以更容易地理解概念,然后再用Xcode 4。)

  1. nib/xib文件中包含了归档对象。在Interface Builder中(无论是独立的还是集成到Xcode中),通过创建实时对象来创建nib/xib文件,当文件保存时,这些实时对象会被冷冻成归档对象。TableArray是在nib文件中创建的一个实例。您可以从对象库中拖动一个通用对象到nib中,并将其类更改为任何您想要的类。这就是对象的创建方式。

  2. 您不需要创建引用绑定。绑定具有方向,从对象A到另一个对象B。您在A的一侧(在本例中是NSTableColumn)设置绑定。引用绑定只是在B的一侧显示这些信息。因此,在IB中选择表视图列并在那里设置绑定。

  3. 这是在NSTableColumn的绑定面板上完成的。


1: 那么要创建TableArray,我只需要从对象库中拖动一个通用的Object ControllerObjects区域,然后将其重命名为TableArray?然后呢? 2: 找到了!!!好的,a)右键单击NSTableView的列部分,那里就有绑定选项。 3: 嗯... NSTableColumn的binding pane在哪里? - dawg
我非常推荐你下载XCode 3并在这个阶段使用它。那会少很多痛苦。还要购买Hillegass的Cocoa书籍并阅读它。 - Yuji

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接