2012-07-08 3 views
1

Я пытался выяснить, как пользоваться табличными представлениями, и я немного застрял, если честно. Я хотел использовать табличное представление с ограниченным количеством строк (скажем, 50 макс). Он начинается пустым, с 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 и см. [Руководство по программированию таблиц] (http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/TableView /) –

ответ

1

Поскольку просмотрщик журналов является только для чтения приложениями UITableView, то, как вы это делаете, это довольно просто, как только вы понимаете основы. Напомним, что представления таблиц полагаются на их модели данных, чтобы предоставить им правильную информацию, которая должна отображаться.

модель данных для «последних пятидесяти строк журнала» может быть столь же просто как 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.

+0

Это не проект iOS, а проект на Mac. Тем не менее, спасибо за ваш вклад, он должен быть достаточно переносимым. Я отдам его. – Tiago

+0

Ваша идея должна работать, но я не могу заставить NSTableView обновляться на основе содержимого NSMutableArray. См. Http://stackoverflow.com/questions/11393195/nstableview-add-row-gives-empty-cells-what-am-i-doing-wrong – Tiago

+0

@loco К сожалению, я не заметил префикса 'NS', думая, что это проект ios. Основная идея должна быть одной и той же. – dasblinkenlight

Смежные вопросы