2016-10-27 4 views
-1

У меня есть UITabBarController с двумя вкладками. На каждой вкладке есть таблица, и в viewWillAppear я загрузить данные и перезагрузить таблицу:Данные не перезагружаются при переключении между вкладками

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    tableView.delegate = self 
    tableView.dataSource = self 
    loadTasks() 
} 

func loadTasks(){ 
let url = Api.GET_TASK_USER_MONTH 
    Task.getTasks(url) { tasks in 
     if !tasks.isEmpty { 
      for index in 0...tasks.count-1 { 
       self.tasks.append(tasks[index]) 
      } 
     } 
     self.tableView.reloadData() 
    } 
} 

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

Любые идеи?

ОБНОВЛЕНО: метод loadTasks().

+0

Я предлагаю, чтобы 'tableView.delegate = self' и' tableView.dataSource = self' в 'viewDidLoad' вместо' viewWillAppear' –

+0

Я уже сделал это, но не повезло ... большое спасибо! – smarciel

+0

показать еще код, как вы это делаете с tableView. – vaibhav

ответ

1

Обычно viewWillAppear следует вызывать, если вы «вводите» вкладку. Возможно, что ViewController не деинициализирован => ViewController все еще существует, и поэтому viewWillAppear не будет вызываться.

Вам может понадобиться использовать слабый себя в loadTasks:

func loadTasks(){ 
    let url = Api.GET_TASK_USER_MONTH 
    Task.getTasks(url) { [weak self] tasks in 
     if !tasks.isEmpty { 
      for index in 0...tasks.count-1 { 
       self?.tasks.append(tasks[index]) 
      } 
     } 

     self?.tableView.reloadData() 
    } 
} 
+0

Спасибо! Я собираюсь проверить это и дать отзыв. – smarciel

+0

@Sarah Я также предлагаю вам использовать 'reloadData()' в основном потоке, поэтому 'DispatchQueue.main.async {self.tableView.reloadData()}' –

+0

Это не сработало ... Я думаю проблема заключается в том, что контроллер View не инициализирован или что-то еще, потому что мой метод loadTask() не вызывается после двух первых раз ... – smarciel

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