2015-09-21 5 views
1

Мне нужно постоянно обновлять данные внутри ячейки (это «опубликовано назад таймер»). Я могу добавить событие NSTimer внутри ячейки, которое обновляет метку каждую секунду до фактических данных, но я думаю, что это создаст утечки памяти.Постоянно обновлять данные внутри ячейки в TableView

Как вы знаете, когда ячейка не отображается, она не загружается в память, поэтому, если пользователь прокручивается вниз, чем верхние ячейки выгружаются из памяти. Но будут ли таймеры существовать постоянно?

Я могу установить .invalidate() таймер, если cellView выгружается из представления/памяти, но я не знаю, что называется func при выгрузке NSTableCellView (или NSView).

ответ

0

Я нашел такой способ обновления данных во всех ячейках (изменение ваши имена классов для ячейки и таблицы):

updateDateInCellsTimer = NSTimer.scheduledTimerWithTimeInterval(30, target: self, selector: "updateDateInCells", userInfo: nil, repeats: true) 

func updateDateInCells() { 
    for var row = 0; row < tableView.numberOfRows; row++ { 
     guard let cell = tableView.viewAtColumn(0, row: row, makeIfNecessary: false) as? NSTableCellView else { continue } 

     // here you can do anything, cell is your cell reference 
    } 
} 

Он работает для NSTableView. Если вы хотите использовать его в iOS (есть UITableView), используйте answer of @Kai Huppmann.

0

В вашей пользовательской ячейке используйте deinit {} для аннулирования.

Кроме того, клетки верха не освобождаются из памяти, а откладываются при необходимости. Поэтому не забудьте сбросить свой таймер (если необходимо) в prepareForReuse вашей пользовательской ячейки.

4

Не ставьте таймер на клетки, положить один в контроллер, который делает обновление всех видимых ячеек, как это:

- (void)timerFired { 
    for (UITableViewCell *cell in self.tableView.visibleCells) { 
     [cell doNecessaryViewUpdate]; 
    } 
} 
+0

Это хороший ответ, но он работает только для iOS. Существует нет tableView.visibleCells для Mac OS :( – Vasily

+0

возможно reloadData достаточно. Если это создает плохую работу с пользователем, вы должны пойти с такими подходами, как это http://stackoverflow.com/a/17336068/2660952. В любом случае Я бы избегал поднимать несколько таймеров в ячейках, которые каким-то образом «выходят из-под контроля» в повторном потоке табличных представлений ... –

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