NSTableView更新/重新加载问题

时间:2011-08-23 07:20:01

标签: cocoa nstableview nstextview reloaddata

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

  1. 我没有使用绑定
  2. 正确设置了delegate和dataSource
  3. 该表使用MyObject的
  4. 的NSMutableArray

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

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

    州1 :(显示填充数据)

    State 1

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

    State 2

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

    State 3

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

    State 4

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

    State 5

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

    State 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];
        }
    }
    

    感谢您在确定问题根源时提供帮助。

1 个答案:

答案 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];
}