11

当我使用 Interface Builder 将控件绑定到 NSArrayController 时,绑定检查器的“Controller Key”字段下有多种选项。

我了解“arrangedObjects”是什么,并且我半了解什么是“选择”,但我希望看到对所有选项以及何时使用每个选项的非常好的解释。该列表包括:selectionIndexes、selectionIndex、selectedObject、sortDescriptors 等。我一直无法找到对这些选项的很好解释。

我在使用绑定到目标 > 选择的按钮时遇到问题,所以我希望对这些控制器键有更深入的了解可以帮助我调试我的问题。

谢谢!!!

4

4 回答 4

14

这些很难找到。各种 Cocoa 书籍甚至 Apple 的文档似乎到处都引用了它们,但我还没有看到有人将它们的解释统一到一个位置。答案是,Apple 在每个控制器类的文档中定义了它们:

这些文档也很有用:

这些“控制器”对象的继承看起来像这样(这对于发现一些“控制器键”选项的来源很重要):

NSController -> NSObjectController
NSController -> NSObjectController -> NSArrayController
NSController -> NSObjectController -> NSArrayController -> NSDictionaryController
NSController -> NSObjectController -> NSTreeController
NSController -> NSUserDefaultsController

// Note:  NSController is an abstract class (don't worry about it).  It inherits from NSObject.

如果您发现文档中未为特定类定义控制器键,则它可能已在其超类中定义。以下是上述每个可用的所有控制器键(Xcode 3.2.1,Interface Builder 3.2.1):

// **NSObjectController**
canAdd
canRemove
isEditable
selectedObjects
selection


// **NSArrayController**
arrangedObjects
canAdd
canInsert
canRemove
canSelectNext
canSelectPrevious
filterPredicate
isEditable
selectedObjects
selection
selectionIndex
selectionIndexes
sortDescriptors


// **NSDictionaryController**
arrangedObjects
canAdd
canInsert
canRemove
canSelectNext
canSelectPrevious
filterPredicate
isEditable
selectedObjects
selection
selectionIndex
selectionIndexes
sortDescriptors


// **NSTreeController**
arrangedObjects
canAdd
canAddChild
canInsert
canInsertChild
canRemove
isEditable
selectedObjects
selectedNodes
selection
selectionIndexPath
selectionIndexPaths
sortDescriptors


// **NSUserDefaultsController**
hasUnappliedChanges
values

因此,在列表中找到您想要的那个,查看该控制器类的文档,您会找到它的定义。如果它不存在,它可能是在文档中为其超类(可能是 NSObjectController)定义的。

于 2010-03-13T23:39:59.097 回答
8

控制器键是您要绑定的(控制器对象的属性)的键。模型关键路径是绑定对象可以通过它向模型对象询问更基本的对象,例如字符串或图像,或其他模型对象(即向下钻取模型)的关键路径。

一个例子:假设你在一个数组控制器中有一个 Person 对象,每个 Person 都有一个name. 您将表列绑定到数组控制器、控制器键arrangedObjects(从而获取模型对象)、模型键路径name(从而获取值对象)。

一个更复杂的例子:假设你有一个 Departments 的数组控制器。每个部门都包含人员(部门中的员工)。您可以将 People 数组控制器绑定到 Departments 控制器、控制器键arrangedObjects(获取 Department 模型对象)、模型键路径@distinctUnionOfObjects.employees(获取 Person 模型对象),然后将表列绑定到 People 控制器、控制器键arrangedObjects、模型键路径name.

那张桌子是给为贵公司工作的人准备的;如果您有一个单独的潜在员工表,您也可以为他们创建 Person 对象,并且他们不会出现在现有员工的表中,因为他们不在部门中。当您雇用他们时,您会将他们添加到一个或多个部门;然后,它们会自动出现在 People 阵列控制器中,因为该阵列控制器正在观察employees所有部门的情况。

于 2009-11-21T02:37:15.640 回答
7

您想要Cocoa Bindings Reference

于 2009-11-21T00:26:03.007 回答
2

查看Interface Builder User Guide,有一个“连接和绑定”部分,其中包含表 7-1:

Controller Key:NSController 对象的一个​​属性。绑定到 NSController 对象时,您可以使用此字段选择键路径中的第一个条目。为方便起见,与此字段关联的菜单显示所选控制器对象上可用的属性。您可以键入属性的名称,或者直接从提供的列表中选择它。

于 2010-05-01T09:52:45.353 回答