不断更新TableView中单元格内的数据

时间:2015-09-21 12:34:28

标签: objective-c swift nstableview

我需要不断更新单元格内的数据(它已经发布了计时器")。我可以在单元格中添加NSTimer事件,每秒更新标签到实际数据,但我认为它会造成内存泄漏。

如您所知,当单元格未显示时,它未被加载到内存中,因此如果用户向下滚动而不是从上部单元格卸载内存。但定时器会永久存在吗?

如果cellView从视图/内存中卸载,我可以.invalidate()计时器,但是我不知道在卸载NSTableCellView(或NSView)时调用了什么func。

3 个答案:

答案 0 :(得分:4)

不要将定时器放到单元格中,将一个定时器放入控制器中,以更新所有可见单元格,如下所示:

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

答案 1 :(得分:0)

在自定义单元格中,使用deinit {}无效。

此外,鞋面细胞不会从记忆中释放出来,而是在需要时会被释放。因此,请务必在自定义单元格的prepareForReuse中重置计时器(如果需要)。

答案 2 :(得分: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.