Xcode 4中的Cocoa绑定

时间:2011-04-02 05:09:26

标签: objective-c macos interface-builder xcode4

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

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

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

enter image description here

  1. 对象库或源代码中都不存在名为Object的{​​{1}};它来自哪里?

  2. 右边的TableArray;这些是如何创建的?

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

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

    后续

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

    以下是我需要花费一些时间来解决的问题:

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

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

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

    4. 存储阵列Array Controller Object隐含在myContentArray

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

2 个答案:

答案 0 :(得分: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顶部列出的其他绑定。
  6. 连接检查器的引用绑定部分显示已通过所选控制器建立的所有绑定。因此,如果您选择TableArray并导航到连接检查器,您现在将看到“arrangeObjects.firstName” - >值,表列 - 名字。这向您展示了您刚刚建立的绑定。

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

答案 1 :(得分:1)

就基础概念而言,Xcode 4的现在集成的界面构建器部分与旧的Interface Builder没有什么不同。

下载仍在Apple网站上提供的XCode 3,并按照在线提供的教程进行操作。

或者在SO中比我更有帮助的人可能会使用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的绑定窗格上完成的。