私のモデルでは、firebaseからデータを読み込む機能があります。 完了したらcompletionHandler(true)を呼び出します。 これは私のコントローラのviewDidLoad関数で、UITableViewControllerを継承しています。 私の完了ハンドラが完了しても、まだtableViewデータを再読み込みできませんでした4
override func viewDidLoad()
{
super.viewDidLoad()
let activityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
tableView.backgroundView = activityIndicatorView
self.activityIndicatorView = activityIndicatorView
activityIndicatorView.startAnimating()
model.readInFirebaseData { (success) in
print("data read in")
activityIndicatorView.stopAnimating()
dataArray = model.firebaseDataArray
self.tableView.reloadData()
}
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
tableView.tableHeaderView = searchController.searchBar
}
しかし、テーブルが空と何らかの理由のself.tableView.reloadDataのために残っている()は、私が好きなテーブルに移入されていませんが、私はTableViewControllerからセグエとリストを戻ってきた場合に移入されます。
どこが間違っているのか正確にはわかりません。
ありがとうございました。
更新:
私はまだそれは私がデリゲートを使用completionHandlerのように代わりに働いて得ることができませんでした。私がやったことだった。
シングルトン:
protocol Refresh{
func refreshData()
}
var delegate:Refresh?
func readInFirebaseData()
{
self.ref.child("users").observe(DataEventType.childAdded, with: { (snapshot) in
user.name = value?["name"] as? String ?? ""
self.dict.updateValue(user, forKey: uid)
DispatchQueue.main.async {
self.delegate?.refreshData()
print("main thread dispatch")
}
})
}
TableViewController:すべての作品
class ListController: TableViewController, Refresh{
viewDidLoad()
{
model.delegate = self
}
func refreshData() {
print("called")
array = model.array
self.tableView.reloadData()
}
。本当に私が答えを知らない唯一の問題は、DispatchQueue.main.asyncが毎回firebaseが "user"で読み込まれることです。しかし、私はそれをreadInFirebase関数の最後に置き、何もリストに入れられませんでした。しかし、いずれにしても、現時点では機能します。
テーブルビューを設定するコードを表示できますか? – Wez
ちょっと@Wez。クラスがListControllerクラスとして定義されるように、私はUITableViewControllerを拡張しています:UITableViewController、UISearchResultsUpdating。 – Mike
あなたのUITableViewDelegateとUITableViewDataSourceはどこにありますか? – Wez