У меня возникла странная проблема с 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 - это IBOutlet, подключенный к моему NSOutlineView.Если я выберу другую строку и нажму кнопку, значение selectedRow изменится должным образом, но объект NSCell никогда не изменится, и каким должно быть его значение (т. Е. NSString item), всегда будет показано значение последнего видимого элемента (т. Е. Если естьэлемент с потомками в качестве последнего элемента Элемент NSString будет родительским, если он не раскрыт, или последним дочерним, если он развернут).
Странная вещь заключается в том, что я использую в основном тот же код в другом месте для doubleActionна NSOutlineView, и он работает отлично.В этом случае код выглядит следующим образом:
- (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.изменение элемента и ячейки с изменением rowNumber.
Есть идеи, почему это не работает в первом примере?