2009-11-18 44 views
3

如何在數據源更改時更新NSTableView?

我正與可可編程Mac OS X(一本好書)一起工作。本書給出的練習之一是構建一個簡單的待辦事項程序。 UI具有表格視圖,用於鍵入新項目的文本字段和用於將新項目添加到表格的「添加」按鈕。

在後端我有一個控制器,它是我的NSTableView的數據源和委託。控制器還實現了一個由「添加」按鈕調用的IBAction方法。它包含一個NSMutableArray來保存待辦事項列表項。當按鈕被點擊時,action方法會正確觸發,並且新字符串將被添加到可變數組中。但是,我的數據源方法未被正確調用。他們是:

- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView NSLog(@「Calling numberOfRowsInTableView:%d」,[todoList count]); return [todoList count]; }

- (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很聰明,在沒有任何東西可以繪製時不會調用這個方法。是否有一些我需要調用的方法讓表視圖知道其數據源已更改,並且它應該重繪本身?

回答

11
-[NSTableView reloadData]; 

NSTableView API reference

+3

我也把一些精力來尋找,只是在錯誤的地方。我檢查了表視圖編程指南,NSTableViewDataSource API參考和NSTableViewDelegate API參考。當你知道它已經在哪裏時,這似乎很明顯。 – jergason 2009-11-18 19:49:07

+0

夠公平的。祝你好運。 – 2009-11-18 19:56:57

+9

不要讓我開始嘗試找到一個特定任務的方法,當它可能分佈在(您選擇的神祗)只知道多少類和協議。這是文檔中的主要弱點。要真正使用不熟悉的類,您必須閱讀該類的文檔,它所繼承的所有類以及它所繼承或使用的所有協議。古怪的樂趣。 – TechZen 2009-11-18 22:11:02