2014-09-23 6 views
3

У меня возникла проблема при попытке перезагрузить мой 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 
} 
+0

И вызвано ваше «обновление» func? – derdida

+0

@derdida Да, это называется. Единственной частью функции «update», которая не работает, является функция self.tableView.reloadData(). –

+0

Попробуйте запустить ее в основном потоке: dispatch_async (dispatch_get_main_queue(), { prepMgr.tableView.reloadData() }) – derdida

ответ

1

Вы также можете использовать NSNotifi cation для обработки «перезагрузки» таблицы. И просто позвоните им, если вам потребуется обновление вашей таблицы.