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 が賢いからだと思います。データソースが変更されたことをテーブルビューに知らせるために呼び出す必要があるメソッドはありますか?