2012-07-08 97 views
1

我一直在努力解決如何使用表格視圖,如果我誠實地說我有點卡住了。我想使用有限數量的行的tableview(比如說50 max)。它從零開始,有0行。然後我想按照以下方式做一些事情:使用NSTableView進行日誌記錄?

[self logMessage:@"Waiting for response"]; 

其中在上面的文本底部插入一個新行。如果我做的是另調用此僞函數:

[self logMessage:@"Server response received"]; 

應該還插入上一行下面的另一個新行,並確保它是可見的。一旦達到上述限制50,並且插入新消息,我希望最舊的消息被刪除。所有這些都可以滾動,默認情況下最新可見。

我看到正確的事情嗎?最後,我希望能夠在主窗口下方的一個很好的小抽屜中找到它,如果需要,我可以從主菜單切換。但正如我所說的,我無法正確地使用表格視圖,它似乎不像其他對象那樣直截了當。

任何示例代碼將不勝感激!

+0

http://developer.apple.com/library/mac/#samplecode/TableViewPlayground/Introduction/Intro.html並參見[Table View Programming Guide](http://developer.apple.com/library/mac)/documentation/Cocoa/Conceptual/TableView /) – 2012-07-08 22:47:24

回答

1

由於日誌查看器是UITableView的只讀應用程序,因此一旦瞭解基本知識,您的操作方式就相當簡單。回想一下,表視圖依賴於它們的數據模型來爲它們提供需要顯示的正確信息。

爲「最後的50行日誌」的數據模型可以簡單到一個NSMutableArray:使用insertObject:atIndex:添加行,removeLastObject刪除「溢出」線,像這樣:

NSMutableArray *logLines = [NSMutableArray array]; // <<== this goes into the init method 

-(void) addLogLine:(NSString*)line { 
    [logLines insertObject:line atIndex:0]; 
    while (logLines.count > 50) { 
     [logLines removeLastObject]; 
    } 
} 

現在,您可以使用logLines作爲表格的「模型」:數據提供者可以通過查看logLines.count來確定有多少行;表格中每行的內容將爲logLines中相應索引處的對象,依此類推。請查看您最喜愛的iOs教程的UITableView部分,以獲取需要編寫的「樣板代碼」,以便顯示UITableView中的數組元素。

+0

這不是一個iOS項目,而是Mac上的一個項目。儘管如此,感謝您的意見,它應該是相當可轉讓的。我會放棄它。 – Tiago 2012-07-09 07:58:00

+0

你的想法應該可行,但我似乎無法讓NSTableView根據NSMutableArray的內容進行更新。請參閱:http://stackoverflow.com/questions/11393195/nstableview-add-row-gives-empty-cells-what-am-i-doing-wrong – Tiago 2012-07-09 10:26:43

+0

@loco哎呀,我沒有注意到'NS'前綴,認爲這是一個ios項目。但基本的想法應該是一樣的。 – dasblinkenlight 2012-07-09 11:00:42

相關問題