2011-08-23 70 views
0

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

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

现在,我可以添加或删除行的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

我用下面的方法来获取UPD从UITextView的ated值:

- (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

浪费无数个小时后,我终于能够解决这个问题。到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]; 
} 
+1

何不'rowObject.text = [theString拷贝];'? :) – Elland