Как обновить UITableViewCells, используя NSTimer и NSNotificationCentre в Swift

ПРИМЕЧАНИЕ: запрашивать ответы встриж Пожалуйста.

Что я пытаюсь сделать:

Обновляйте ячейки таблицы каждые 1 секунду и отображайте обратный отсчет в реальном времени.

Как я это делаю сейчас:

У меня есть таблица с ячейками, которые содержат метку.

Когда ячейки генерируются, они вызывают функцию, которая вычисляет время между сегодняшним днем ​​и сохраненной целевой датой, и отображает время обратного отсчета, оставшееся в метке.

Чтобы ячейки обновляли метку каждую секунду, я используюNSTimer это перезагружает просмотр таблицы каждую секунду.

ПРОБЛЕМА: Обратный отсчет работает, но когда я пытаюсь выполнить действие Swipe-to-Delete, потому чтоNSTimer перезагружает табличное представление, оно сбрасывает ячейку с измененными значениями, чтобы она больше не смахивалась, и, конечно, это не приемлемо для конечных пользователей.

Что я пытаюсь / Потенциальные решения

Я слышал, что лучший способ сделать это - использоватьNSNotificationCenter это вызваноNSTimer и добавьте слушателей в каждую ячейку. Каждую 1 секунду "трансляция" отправляется сNSNotificationCenter, ячейка получит «трансляцию» и обновит метку.

Я попытался добавить слушателя в каждую ячейку в той части кода, где он генерирует новую ячейку:

// Generate the cells

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

var cell = tableView.dequeueReusableCellWithIdentifier("Tablecell", forIndexPath: indexPath) as UITableViewCell
let countdownEntry = fetchedResultController.objectAtIndexPath(indexPath) as CountdownEntry

// MARK: addObserver to "listen" for broadcasts
NSNotificationCenter.defaultCenter().addObserver(self, selector: "updateCountdownLabel", name: mySpecialNotificationKey, object: nil)

func updateCountdownLabel() {
    println("broadcast received in cell")
    if let actualLabelCountdown = labelCountdown {
        // calculate time between stored date to today's date
        var countdownValue = CountdownEngine.timeBetweenDatesRealTime(countdownEntry.date)
        actualLabelCountdown.text = countdownValue
    }
}

но селектор наблюдателя, похоже, способен нацеливать функции только на уровне контроллера представления, а не в ячейке. (Я не могу заставить "updateCountdownLabel" запускаться изнутри ячейки. Когда я создаю функцию с тем же именем на уровне контроллера представления, функция может быть вызвана)

Вопросы

Итак, мой вопрос: это правильный подход?Если да, как я могу заставить слушателя запускать функцию на уровне ячейки?Если нет, то как лучше всего выполнить обратный отсчет в режиме реального времени, не прерывая действия Swipe on Cell?

Заранее спасибо за помощь!

Ответы на вопрос(0)

Ваш ответ на вопрос