我有两个viewController给我带来麻烦。一个叫notificationAccessViewController.swift
,另一个叫classChooseViewController.swift
。我在notificationAccessViewController
中有一个按钮,触发了一个跳转到classChooseViewController
。我需要做的是在prepareForSegue
函数中,执行Alamofire
请求,然后将响应传递给classChooseViewController
。这样可行!但是,速度不够快。viewDidLoad()在prepareforsegue的Alamofire请求有机会完成之前运行
下面是我的内notificationAccessViewController
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let DestViewController = segue.destination as! classChooseViewController
Alamofire.request("MYURL.com").responseJSON { (response) in
if let JSON : NSDictionary = response.result.value as! NSDictionary?{
let classNameArray = JSON["className"] as! NSArray
print("---")
print(classNameArray)
DestViewController.classNameArray = classNameArray
}
}
}
我把它打印出来classNameArray
到控制台,它就会成功地做prepareForSegue
功能。虽然在我的classChooseViewController.swift
中,我还打印出classNameArray
到控制台,它没有任何内容打印。这是因为classChooseViewController.swift
的viewDidLoad()
函数在prepareForSegue
函数完成之前正在运行。我想知道我能做些什么来确保classChooseViewController
不会加载,直到prepareForSegue
函数完成运行。
下面是我的代码classChooseViewController
class classChooseViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var classNameArray: NSArray = []
override func viewDidLoad() {
super.viewDidLoad()
print(classNameArray)
}
}
我重视的控制台读取内容拍摄成照片。您可以看到,在prepareForSegue()
函数之前,classNameArray
打印来自classChooseViewController
的viewDidLoad()
函数,因为之后打印出“---”。
您应该将数据加载到目标视图控制器中,而不是源代码中。 – Paulw11
@ Paulw11这是我最初设置的。尽管在'classChooseViewController中,我有一个UITableView,我需要用来自Alamofire请求的数组中的数据来填充它。当我在视图控制器中执行请求时,UITableView已经加载,我不能使用从alamofire请求获得的数组来填充它。 –
是的,你可以。您应该向用户显示一些数据正在加载的指示,一个微调器或“加载”单元,然后在您拥有数据后重新加载表格。 – Paulw11