У меня возникла проблема при попытке перезагрузить мой UITableView из моего файла TimersManager.swift. TimersManager.swift используется для управления/управления всеми таймерами в моем приложении списка дел/таймеров. Я пытаюсь обновить UILabel, чтобы показать обновленное время, когда таймер гаснет. По какой-то причине он не обновит таблицу. Пожалуйста, смотрите ниже, и, надеюсь, вы можете дать мне толчок в правильном направлении. Благодарю.SWIFT - перезагрузка UITableViewCell
верх listTableViewController.swift:
var prepMgr: listTableViewController = listTableViewController()
var cell:customCell!
class listTableViewController: UITableViewController, UITableViewDelegate, UITableViewDataSource {
обновление FUNC в listTableViewController: (это называется другим FUNC в моем файле TimersManager.swift)
func update (indexPathRow: Int) {
for task in taskMgr.tasks {
if task.timerOn == true {
//calculate the time to display in 0:00:00 format.
let date1 : NSDate = task.timerFinishDate
let date2 : NSDate = NSDate()
let compareResult = date1.compare(date2)
let length = Int(round(date1.timeIntervalSinceDate(date2)))
var tmpHours = length/3600
var tmpMinutes = (length % 3600)/60
var tmpSeconds = length % 60
var timeString = "\(tmpHours):\(tmpMinutes):\(tmpSeconds)"
println(task.subText) //test, display old value before update - WORKS
taskMgr.updateTask(indexPathRow, name: taskMgr.tasks[indexPathRow].name, subText: timeString, timerOn: taskMgr.tasks[indexPathRow].timerOn, completed: taskMgr.tasks[indexPathRow].completed, timerFinishDate: taskMgr.tasks[indexPathRow].timerFinishDate, taskID: taskMgr.tasks[indexPathRow].taskID, sliderHours: taskMgr.tasks[indexPathRow].sliderHours, sliderMinutes:taskMgr.tasks[indexPathRow].sliderMinutes, sliderSeconds: taskMgr.tasks[indexPathRow].sliderSeconds)
println(task.subText) //test, display updated value after update - WORKS
println(timeString) //test, display time remaining in timer 0:00:00 - WORKS
}
self.tableView.reloadData() // DOES NOT UPDATE TABLE.
}
}
код для селектора NSTimer в TimersManager.swift:
func tickTock (length:NSTimer!) {
println(length.userInfo)
var count = 0
for timer in timers {
let date1 : NSDate = timer.fireDate
let date2 : NSDate = NSDate()
let compareResult = date1.compare(date2)
let length = Int(round(date1.timeIntervalSinceDate(date2)))
if length <= 0 {
//Invalidate NSTimer
timer.myTimer.invalidate()
//Remove from array
timers.removeAtIndex(count)
}
count++
println(length) //test, shows how many seconds are left - WORKS
//update labels.
prepMgr.update(timer.indexPathRow) //Call to listTableViewController func - Half working, calls the function. updates the correct task. But table is not reloaded.
}
//update labels, reload table
prepMgr.tableView.reloadData() //Test, Not working
}
И вызвано ваше «обновление» func? – derdida
@derdida Да, это называется. Единственной частью функции «update», которая не работает, является функция self.tableView.reloadData(). –
Попробуйте запустить ее в основном потоке: dispatch_async (dispatch_get_main_queue(), { prepMgr.tableView.reloadData() }) – derdida