2017-03-02 17 views
0

私のプロジェクトはまだSwift 2.3を使用しており、まだSwift 3に移行されていません。次のコードでテーブルビューをプルダウンすると、リフレッシュされたデータがデバッグ領域に表示されることが確認できますが、テーブルビューには反映されません。私はIOS 9とIOS 10の両方で試しました。UIRefreshControlが機能しません

var refreshControl = UIRefreshControl() 

if #available(iOS 10.0, *) { 
    TableView.refreshControl = refreshControl 
} else { 
    TableView.addSubview(refreshControl) 
} 

refreshControl.addTarget(self, action: #selector(self.handleRefresh), forControlEvents: UIControlEvents.ValueChanged) 

func handleRefresh(refreshControl: UIRefreshControl) { 
    refreshControl.beginRefreshing() 

    Search() 
    TableView.reloadData() 

    refreshControl.endRefreshing() 
} 
+0

にしている検索()関数の非同期ですか?もしそうなら、 'reloadData()'メソッドはsearch()が完了する前に実行されているかもしれません。非同期の場合、 'reloadData()'と 'endRefreshing'呼び出しをsearch()に移動し、検索が実際に実行を終了した時点でそれらが確実に実行されるようにしてください。 –

答えて

2

あなたはsearch()機能が完了し、結果を返したことを確認することができます場所に移動tableView.reloadData()。これが非同期関数の場合は、reloadData()にいつ呼び出すかを知るために補完ハンドラを追加します。そして、あなたはそうのような機能を呼び出すことができます。

search { 
    dispatch_async(dispatch_get_main_queue()) { 
     tableView.reloadData() 
    } 
} 

それとも、あなたはスウィフト3

DispatchQueue.main.async {...} 
1

メインスレッドでtableViewをリロードしてみてください。

DispatchQueue.main.async { 
self.tableView.reloadData() 
} 
関連する問題