我想,当用户点击某个项目的TabBar显示一个活动的指标。我的问题,我想,就在于该UI主线程被冻结。
当用户点击的TabBar我准备大约需要六秒大数据列表。我得到的活动以显示无处不在,但是当他们挖掘的TabBar。
它好像指示灯“运行”,因为当segued的UITableViewController所示,它是表示显示器。但是,这是为时已晚,调度似乎并不无论做任何事情。
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if let visibleViewCtrl = UIApplication.shared.keyWindow?.visibleViewController {
// do whatever you want with your `visibleViewCtrl`
print (String.init(describing: visibleViewCtrl.classForCoder))
DispatchQueue.main.async{
let aprogressView = ProgressView(Message: "Filtering...",
Theme:.Dark,
IsModal:true);
visibleViewCtrl.view.addSubview(aprogressView)
aprogressView.show()
}
}
return true
}
OK,所以问题是,它带来的是的tableview控制器,它试图获得部分行几乎immediatetly,然后首先fetchrequest阻断一切,因为它是在主线程上。
解决了:
增加了一个布尔值:
var loadData = false
override func viewDidAppear(_ animated: Bool) {
loadData = true
self.tableView.reloadData()
}
然后代表的发言:
func sectionIndexTitles(for tableView: UITableView) -> [String]? {
if loadData == false {
return nil
}
return searchFetchedResultsController.sectionIndexTitles
}
func numberOfSections(in tableView: UITableView) -> Int {
if loadData == false {
return 0
}
现在,它会立即转换到新的控制器,因此我现在可以从viewWillAppear中显示的反馈:
appDelegate.progressView = ProgressView(Message: "Filtering Brands", Theme:.Dark, IsModal:true);
appDelegate.progressView!.show()
这不会编程显示工作
self.navigationController?.pushViewController(vc, animated: false)