Cocoa键值绑定:Controller Key的各种选项有哪些解释?

时间:2009-11-21 00:17:49

标签: cocoa macos interface-builder key-value-observing key-value-coding

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

我理解“arrangeObjects”是什么,我半理解“选择”是什么,但我很乐意看到所有选项的真正好解释以及何时使用每个选项。该列表包括:selectionIndexes,selectionIndex,selectedObject,sortDescriptors等。我无法找到这些选项的良好解释。

我遇到了一个绑定目标的按钮>选择,所以我希望更深入地了解这些控制器密钥可能会帮助我调试我的问题。

感谢!!!

4 个答案:

答案 0 :(得分:14)

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

  • NSObjectController(doc
  • NSArrayController(doc
  • NSDictionaryController(doc
  • NSTreeController(doc
  • NSUserDefaultsController(doc

这些文档也很有用:

这些“Controller”对象的继承看起来像这样(这对于发现某些“Controller Key”选项的来源非常重要):

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.

如果您发现未在特定类的文档中定义Controller Key,则可能在其超类中定义。以下是上述每个控制器密钥(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)。

答案 1 :(得分:7)

答案 2 :(得分:7)

控制器键是您绑定到的(控制器对象的属性)的键。模型关键路径是绑定对象可以通过其向模型对象请求更多基本对象(如字符串或图像)或其他模型对象(即向下钻取到模型中)的关键路径。

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

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

那张桌子适合为贵公司工作的人;如果您有一个单独的预期员工表,您也可以为他们创建Person对象,并且它们不会显示在现有员工的表中,因为他们不在部门中。当你雇佣他们时,你会将他们添加到一个或多个部门;然后,它们将自动显示在People数组控制器中,因为该数组控制器正在观察所有部门的employees

答案 3 :(得分:2)

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

  

Controller Key:一个属性   NSController对象。绑定时   一个NSController对象,你使用它   字段选择中的第一个条目   关键路径。与之相关的菜单   此字段显示属性   在所选控制器上可用   对象为方便。你可以输入   财产的名称或简单   从提供的列表中选择它。