私はココア初心者です。テキスト列を持つNSTableViewと、選択した行のテキストを表示するプレビューNSTextViewフィールドを含むcocoaアプリケーションがあります。
- バインディングを使用していません
- デリゲートとdataSourceが適切に設定されている
- テーブルはMyObjectのNSMutableArrayを使用します
これで、行を正常に追加または削除できます。選択を変更すると、対応する選択されたテキストが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];
}
}
問題の原因を特定するための助けに感謝します。