4

Cocoa Programming For Mac OS X (素晴らしい本) と一緒に作業しています。この本が提供する演習の 1 つは、単純な To-Do プログラムを作成することです。UI には、テーブル ビュー、新しい項目を入力するためのテキスト フィールド、および新しい項目をテーブルに追加するための [追加] ボタンがあります。

バックエンドには、NSTableView のデータ ソースおよびデリゲートであるコントローラーがあります。コントローラーは、[追加] ボタンによって呼び出される IBAction メソッドも実装します。To Do リスト項目を保持する NSMutableArray が含まれています。ボタンをクリックすると、アクション メソッドが正しく起動し、新しい文字列が変更可能な配列に追加されます。しかし、データ ソース メソッドが正しく呼び出されません。ここにそれらがあります:

- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { NSLog(@"Calling numberOfRowsInTableView: %d", [todoList count]); [todoList カウント] を返します。}

- (id)tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn
row:(NSInteger)rowIndex {
    NSLog(@"Returning %@ to be displayed", [todoList objectAtIndex:rowIndex]);
    return [todoList objectAtIndex:rowIndex];
}

これが摩擦です。-numberOfRowsInTableView配列に何か新しいものを追加するたびにではなく、アプリが最初に起動したときにのみ呼び出されます。-objectValueForTableColumn絶対に呼ばれません。これは、描画するものが何もないときにこのメソッドを呼び出さないほど Cocoa が賢いからだと思います。データソースが変更されたことをテーブルビューに知らせるために呼び出す必要があるメソッドはありますか?

4

1 に答える 1

11
-[NSTableView reloadData];

API リファレンスを見るNSTableView

于 2009-11-18T19:43:26.980 に答える