私に問題を引き起こしている2つのviewControllerがあります。 1つはnotificationAccessViewController.swift
と呼ばれ、もう1つはclassChooseViewController.swift
と呼ばれます。私はnotificationAccessViewController
のボタンを持って、classChooseViewController
のセグをトリガーします。私がする必要があるのは、prepareForSegue
関数の中にあり、Alamofire
要求を実行してから、応答をclassChooseViewController
に渡します。それは動作します!しかし、十分に速くはありません。以下はprepareforsegueのAlamofireリクエストが終了するチャンスがある前に、viewDidLoad()が実行されています
私はそれはそれに成功し、コンソールにclassNameArray
をプリントアウトしている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
}
}
}
以内に私prepareForSegue
機能です。私のclassChooseViewController.swift
では、コンソールにclassNameArray
も印刷していますが、その内部には何も印刷されません。これは、prepareForSegue
機能が終了する前にclassChooseViewController.swift
のviewDidLoad()
機能が実行されているためです。 prepareForSegue
機能の実行が完了するまで、classChooseViewController
がロードされないようにするためにできることを知りたいと思います。
以下は、私はコンソールが読み込ま何の写真を添付しているclassChooseViewController
class classChooseViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var classNameArray: NSArray = []
override func viewDidLoad() {
super.viewDidLoad()
print(classNameArray)
}
}
のために私のコードです。 classNameArray
はclassChooseViewController
のviewDidLoad()
ファンクションがprepareForSegue()
ファンクションの前に印刷されていることがわかります。「---」が後で印刷されるからです。
送信元ではなく宛先ビューコントローラでデータをロードする必要があります。 – Paulw11
@ Paulw11それは私が元々セットアップしたものです。けれども、「classChooseViewControllerに、私は私がAlamofire要求から取得し、アレイからのデータを取り込む必要があるのUITableViewを持っています。ビューコントローラでリクエストを実行すると、UITableViewが既にロードされており、alamofireリクエストから取得した配列を使用できません。 –
はい、できます。データがロードされていること、スピナーまたは「ロード中の」セルが表示されていることをユーザーに表示し、データを取得したらテーブルをリロードする必要があります。 – Paulw11