假设我有以下情况:
alt text http://img693.imageshack.us/img693/5818/controllerselection.png
当我在NSTableView中选择不同的行时,它会神奇地更新NSArrayController(PersonController)选择。 NSTableView是如何做到这一点的?它是做这样的事情:
- (void)bind:(NSString *)binding toObject:(id)observableController withKeyPath:(NSString *)keyPath options:(NSDictionary *)options;
{
if([observableController isKindOfClass:[NSArrayController class]]){
// got the NSArrayController, which can be used to change selection
} else {
// not an NSArrayController, don't try to change selection
}
//...
}
我问,因为我正在实现我自己的可绑定NSControl,我希望它像NSTableView一样修改绑定的NSArrayController的选择。
答案 0 :(得分:9)
在预感中,我覆盖了bind:toObject:withKeyPath:options:
上的NSTableView
以及NSTableColumn
个对象,并让他们记录了他们的绑定。这是输出:
Binding NSTableColumn["Last Name"].value to key path "arrangedObjects.lastName" of NSArrayController: 0x215fc0 Binding NSTable.content to key path "arrangedObjects" of NSArrayController: 0x215fc0 Binding NSTable.selectionIndexes to key path "selectionIndexes" of NSArrayController: 0x215fc0 Binding NSTable.sortDescriptors to key path "sortDescriptors" of NSArrayController: 0x215fc0 Binding NSTableColumn["First Name"].value to key path "arrangedObjects.firstName" of NSArrayController: 0x215fc0
尽管我所做的唯一绑定是NSTableColumn对象的“值”,但看起来IB正在自动添加其他绑定。 NSTableView
能够修改NSArrayController
选项,因为它会在IB中自动绑定selectionIndexes
。
selectionIndexes
和sortDescriptors
{}确认了这一点。