0

我是可可新手。我有一个可可应用程序,其中包含一个带有文本列的 NSTableView,以及一个显示所选行文本的预览 NSTextView 字段。

  1. 我没有使用绑定
  2. 委托和数据源已正确设置
  3. 该表使用 MyObject 的 NSMutableArray

现在,我可以成功添加或删除行。我可以更改选择,相应的选定文本会出现在 UITextView 中。

问题:一旦我使用 NSTextView 更改/编辑任何行/列的值,NSTableView 就会干扰我的 NSMutableArray 并显示不正确的数据。之后,更改选择会在表格视图中显示不同的状态。请参阅随附的屏幕截图。

状态 1:(显示填充数据)

状态 1

状态 2:(行选择已更改)

状态 2

状态 3:(行选择已更改)

状态 3

状态 4:(即将编辑值!)

状态 4

状态 5:(突出显示/选择第 1 行)

状态 5

状态 6:(突出显示/选择第 2 行)

状态 6

我正在使用以下方法从 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];
    }
}

感谢您在确定问题根源方面的任何帮助。

4

1 回答 1

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];
}
于 2011-08-24T04:02:12.310 回答