Eli*_*eth 10 macos cocoa interface-builder key-value-observing key-value-coding
当我使用Interface Builder将控件绑定到NSArrayController时,绑定检查器中的"Controller Key"字段下有各种选项.
我理解"arrangeObjects"是什么,我半理解"选择"是什么,但我很想看到所有选项的真正好解释以及何时使用每个选项.该列表包括:selectionIndexes,selectionIndex,selectedObject,sortDescriptors等.我无法找到这些选项的良好解释.
我遇到了一个绑定目标>选择按钮的问题,所以我希望更深入地了解这些控制器键可能会帮助我调试我的问题.
谢谢!!!
Dav*_*her 14
找到这些很棘手.它们似乎被各种Cocoa书籍,甚至Apple的文档引用到处,但我没有看到任何人将它们的解释统一到一个位置.答案是,Apple在每个控制器类的文档中定义它们:
这些文档也很有用:
这些"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.
Run Code Online (Sandbox Code Playgroud)
如果您发现未在特定类的文档中定义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
Run Code Online (Sandbox Code Playgroud)
因此,找到所需列表中的那个,查看该控制器类的文档,您将找到它的定义.如果它不存在,它可能在其超类的文档中定义(可能是NSObjectController).
控制器键是您绑定到的(控制器对象的属性)的键.模型关键路径是绑定对象可以向模型对象请求更多基本对象(如字符串或图像)或其他模型对象(即向下钻取到模型中)的关键路径.
一个例子:假设你在一个数组控制器中有一个Person对象,每个Person都有一个name.将表列绑定到数组控制器,控制器键arrangedObjects(从而获取模型对象),模型键路径name(从而获取值对象).
一个更复杂的例子:假设你有一个Departments的数组控制器.每个部门都包含人员(部门的员工).您可以将People数组控制器绑定到Departments控制器,控制器键arrangedObjects(获取Department模型对象),模型键路径@distinctUnionOfObjects.employees(获取Person模型对象),然后将表列绑定到People控制器,控制器键arrangedObjects,模型键路径name.
该表适用于为贵公司工作的人员; 如果您有一个单独的潜在雇员表,您也可以为他们创建Person对象,并且它们不会显示在现有员工的表中,因为他们不在部门中.当你雇佣他们时,你会将他们添加到一个或多个部门; 然后,它们将自动显示在People数组控制器中,因为该数组控制器正在观察employees所有部门.
| 归档时间: |
|
| 查看次数: |
3868 次 |
| 最近记录: |