有一个右视图控制器可以在主视图控制器上滑入和滑出。此右视图控制器中有一个表,用于包含来自main的传递信息。
我可以从main访问并将数据传递给控制器,但在右视图中我需要绑定从main传递给它的数据。
问题在于,即使我在视图聚焦后尝试绑定数据,它也会在tableView.reloadData()
上给出nil。
RightViewController
有两个主要
func loadAlerts(){
self.tableView.reloadData()
}
func setAlerts(alerts: Alerts){
self.alerts = alerts
}
Alerts
只是一个自定义对象。它确实包含值。 self.alerts
是一个类变量。
MainViewController
以这种方式调用这两个函数
self.rightViewController = self.storyboard?.instantiateViewController(withIdentifier: "RightViewController") as! RightViewController
从api调用中获取数据后设置数据
if let count = self.alerts?.Alerts.count {
if count == 0 {
return
}
//set on controller
rightViewController.setAlerts(alerts: self.alerts!)
}
这是在类级别定义的,如
private var rightViewController: RightViewController!
然后我有一个委托定义当从一个手势打开右控制器时它就像这样调用
func rightDidOpen() {
rightViewController.loadAlerts()
}
这适用于除了tableView之外的所有内容。即使通过告诉tableView加载主线程如此
DispatchQueue.main.async{
self.tableView.reloadData()
}
没有改变任何事情。此时警报具有值。
如果需要的话,我不介意重构整个事情,所以任何想法,想法或如何让这个工作的信息都值得赞赏。如果需要更多信息,请告诉我。
-
这里表委托和源定义
class RightViewController : UIViewController, UITableViewDataSource, UITableViewDelegate
并从前端分配给uicontroller(其calle Alerts Scene)。忘了提一下,如果我直接在正确的控制器中进行api调用,它工作正常,但我试图减少api调用,所以重构这个。
以下是方法。对不起有误。
//MARK: Tableview delegates
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if let count = alerts?.Alerts.count{
return count
}
return 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let alertD = alerts?.Alerts[indexPath.row] {
let cell = self.tableView.dequeueReusableCell(withIdentifier: "AlertTableViewCell") as! AlertTableViewCell
cell.name.text = alertD.Summary
cell.icon.image = Helpers.listImage24dp(id: alertD.TOA)
cell.selectionStyle = .none
cell.name.textColor = UIColor.blue
return cell
}
return UITableViewCell()
}