我是可可新手。我有一个包含带有文本列的NSTableView的cocoa应用程序,以及一个显示所选行文本的预览NSTextView字段。
现在,我可以成功添加或删除行。我可以更改选择,并在UITextView中显示相应的选定文本。
问题:只要我使用NSTextView更改/编辑任何行/列的值,NSTableView就会干扰我的NSMutableArray并显示不正确的数据。之后,更改选择会在表格视图中显示不同的状态。请参阅随附的屏幕截图。
州1 :(显示填充数据)
状态2 :(行选择已更改)
状态3 :(行选择已更改)
状态4 :(即将编辑价值!)
状态5 :(突出显示/选择第1行)
状态6 :(突出显示/选择第2行)
我正在使用以下方法从UITextView获取更新的值:
- (void)textDidEndEditing:(NSNotification *)notification {
id sender = [notification object];
NSString * theString = [sender string];
NSInteger selectedRow = [_myTableView selectedRow];
if (selectedRow < 0 || selectedRow > [_myArray count] - 1) return;
MyObject *rowObject = [_myArray objectAtIndex:selectedRow];
rowObject.text = theString;
// Update table
[_myTableView reloadData];
}
我已经尝试在NSTableView中实现明显重载错误的解决方法,但这对我不起作用:
- (void)tableViewSelectionIsChanging:(NSNotification *)notification {
if ([notification object] == _myTableView) {
[_myTableView noteNumberOfRowsChanged];
}
}
感谢您在确定问题根源时提供帮助。
答案 0 :(得分:0)
在浪费了无数个小时后,我终于能够解决问题了。对textDidEndEditing:方法的修改如下:
- (void)textDidEndEditing:(NSNotification *)notification {
id sender = [notification object];
NSString * theString = [sender string];
NSInteger selectedRow = [_myTableView selectedRow];
if (selectedRow < 0 || selectedRow > [_myArray count] - 1) return;
MyObject *rowObject = [_myArray objectAtIndex:selectedRow];
// Problematic!
// rowObject.text = theString;
// Working!
rowObject.text = [NSString stringWithString:theString];
// Update table
[_myTableView reloadData];
}