在我的模型中,我有一个从firebase读取数据的函数.完成后我调用completionHandler(true).这是我的控制器中的viewDidLoad函数,它扩展了UITableViewController.
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
}
Run Code Online (Sandbox Code Playgroud)
但是表格仍然是空的,无论出于何种原因,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")
}
})
}
Run Code Online (Sandbox Code Playgroud)
TableViewController:
class ListController: TableViewController, Refresh{
viewDidLoad()
{
model.delegate = self
}
func refreshData() {
print("called")
array = model.array
self.tableView.reloadData()
}
Run Code Online (Sandbox Code Playgroud)
这一切都有效.我不知道答案的唯一问题是DispatchQueue.main.async是每次firebase读取"user"时调用的.但我把它放在readInFirebase函数的末尾,列表中没有填充任何内容.但无论如何它现在都有效.
可能readInFirebaseData方法是异步的,回调运行在与主要线程不同的线程上.
请记住,必须在主线程上运行所有与UIKit相关的调用.
试试:
model.readInFirebaseData { (success) in
print("data read in")
dataArray = model.firebaseDataArray
DispatchQueue.main.async {
activityIndicatorView.stopAnimating()
self.tableView.reloadData()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |