NSOutlineView で発生する奇妙な問題があります。ビューは基本的に、子として関連付けられたファイルを持つアプリのリストです。ビューをデータソースに手動で入力すると、すべて正常に機能します。私が今やりたいことは、アイテムを削除するためのボタンを用意することです。それを行うために、removeAppOrFile メソッドを次のように実装しました。
- (IBAction)removeAppOrFile:(id)sender
{
NSInteger selectedRow = [myView selectedRow];
if (selectedRow == -1) //ie. nothing's selected
{
return;
}
NSTableColumn *col = [myView tableColumnWithIdentifier:@"Column 1"];
NSCell *cell = [col dataCellForRow:selectedRow];
NSString *item = [cell stringValue];
NSLog(@"The row is: %ld\nThe column is: %@\nThe cell is: %@\nThe selected item is: %@",selectedRow, col, cell, item); // For testing purposes
}
myView は、NSOutlineView に接続された IBOutlet です。別の行を選択してボタンをクリックすると、selectedRow の値は適切に変更されますが、NSCell オブジェクトは決して変更されず、その値 (つまり、NSString アイテム) は常に最後の表示アイテムの値を示します (つまり、最後のアイテム NSString アイテムとして子を持つアイテムは、展開されていない場合は親になり、展開されている場合は最後の子になります)。
奇妙なことは、NSOutlineView の doubleAction に基本的に同じコードを他の場所で使用していて、完全に機能することです。その場合、コードは次のようになります。
- (void)editedAppOrFile:(id)sender
{
NSInteger rowNumber = [sender clickedRow];
NSTableColumn *col = [sender tableColumnWithIdentifier:@"Column 1"];
NSCell *cell = [col dataCellForRow:rowNumber];
NSString *item = [cell stringValue];
NSLog(@"The row is: %ld\nThe column is: %@\nThe cell is: %@\nThe selected item is: %@",selectedRow, col, cell, item); // For testing purposes
}
この場合、送信者は OutlineView です。行番号の変更に伴うアイテムとセルの変更。
最初の例でなぜ機能しないのかについて何か考えはありますか?