我必须查看控制器,从第一个控制器的菜单项单击开始,一个segue由' Present Modally'当我按下第二个VC上的刷新按钮时,会打开第二个viewController(充当菜单)的Segue,它从第一个VC调用方法刷新其数据并将其加载到tableView上。问题是从第二个VC到第一个VC调用方法,但在这一行返回nil。
self.tableView.dataSource = self
我认为这是因为第一个VC没有正常运行,因为它在后台(第二个VC的背景是透明的,所以我可以看到后面的第一个VC)。我是swift的新手,我不知道如何处理它。
编辑:这是刷新方法
func refresh() {
// self.dismiss(animated: true, completion: nil)
// present(DayView_Controller, animated: true, completion: nil)
// self.dismiss(animated: true, completion: nil) // it is dismissing the first view controller instead of second
////////
Extensions.ShowAlert(self.pwait, sender: self) // here it causing the exception on viewDidLoad
let defaults = UserDefaults.standard
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "MM/d/yyyy"
let finaldate = formatter.string(from:date)
if Reachability.isConnectedToNetwork(){
// all the services are being call and getting reloaded on tableview
}
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.dataSource = self // exception here
}
第二个EIDT:现在我在刷新点击时解雇了第二个VC,并在完成时从第一个VC调用该方法,仍然得到相同的错误。
@IBAction func Refresh_CLick(_ sender: Any) {
self.dismiss(animated: true, completion: {
DayView_Controller().refresh()
})
// DayView_Controller().refresh()
}
答案 0 :(得分:0)
我相信,你需要做这样的事情:
1)创建协议:
protocol RefreshDelegate {
func dataChanged(data: [Items])
}
2)在你的第二个视图控制器中添加:
var delegate: RefreshDelegate ?
if let del = delegate {
del.dataChanged(data: items) // your refreshed data
}
3)在你的第一个视图控制器中添加扩展名:
extension FirstViewController: RefreshDelegate {
func dataChanged(data: [Items]) {
// update your tableView data -> then reload
}
}
像这样的东西。你应该了解主要观点。
希望有所帮助
答案 1 :(得分:0)
使用委托刷新数据
protocol RefreshDelegate: class {
func refreshData(data: Int)
}
在您的第一个视图控制器中添加委托
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, RefreshDelegate {
准备segue方法集委托
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "go" {
let viewController:SecondViewController = segue.destination as! SecondViewController
viewController.refreshDelegate = self
}
}
// Delegate
func refreshData(data: Int) {
tableData = data
self.tableView.reloadData()
}
在第二个视图控制器中为委托添加变量
weak var refreshDelegate: RefreshDelegate?
现在从第二个视图控制器调用refresh delegate
@IBAction func refreshTapped(_ sender: UIButton) {
self.dismiss(animated: true, completion: {
self.refreshDelegate?.refreshData(data: 10)
})
}