Как NSTableView изменяет выбор NSArrayController через привязки? - PullRequest
4 голосов
/ 18 января 2010

Допустим, у меня следующая ситуация:

alt text

Когда я выбираю разные строки в 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, и я бы хотел, чтобы он изменил выбор связанного NSArrayController, как NSTableView.

1 Ответ

9 голосов
/ 19 января 2010

Я догадался о 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, поскольку он автоматически связывается selectionIndexes в IB.

Это подтверждается в справочнике по привязкам NSTableView selectionIndexes и sortDescriptors.

...