2016-10-27 22 views
-1

私はUITabBarControllerに2つのタブがあります。各タブではテーブルがあり、そして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() 
    } 
} 

しかし、私は、データが表示されたテーブルを切り替えるたびに間違っています。起動すると、2番目のタブデータが表示され、最初のタブデータが表示され、2つのビューに常にそのデータが表示されます。

アイデア?

UPDATED:私のloadTasks()メソッド。

+0

私が代わりに 'viewWillAppear' –

+0

の' viewDidLoad'に 'tableView.delegate = self'せることを提案し、' tableView.dataSource = self'私はすでにそれをやったことがありますが、運がない...たくさんありがとう! – 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

それはうまくいかなかったと思います。最初の2回後にloadTask()メソッドが呼び出されていないため、View Controllerが初期化されていないという問題があります。 – smarciel