我有兩個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