- 私の問題:
SubViewControllerは、そのビューをロードする前に、私は、Alamofire
を通じて、サーバーからデータをロードしようとしています。コードを書いた後、私はAlamofireの非同期機能の問題を解決できませんでした。 Alamofireがジョブを終了する前に、SubViewControllerに常にビューがロードされます。私のコードAlamofireが仕事を終えた後の表示方法
- パート:
ParentViewController:
PrepareForSegue()
を通じてSubViewControllerする方法をリードします。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "CellDetailSegue" {
if let indexPaths = self.dateCollectionView.indexPathsForSelectedItems() {
let subViewController = segue.destinationViewController as! SubViewConroller
}
}
SubViewController:
テストデータがviewDidLoad()
にprint()
によってロードされ、dataRequest()
class SubViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var availablePeriods401 = [String]()
var availablePeriods403 = [String]()
var availablePeriods405 = [String]()
override func viewDidLoad() {
super.viewDidLoad()
self.dataRequest(self.availablePeriods401)
self.dataRequest(self.availablePeriods403)
self.dataRequest(self.availablePeriods405)
print(self.availablePeriods401.count)
print(self.availablePeriods403.count)
print(self.availablePeriods405.count)
}
func dataRequest(_ target: [String]) {
Alamofire.request(.POST, "http://httpbin.org/get", parameters: ["foo": "bar"]).responseJSON {
.
.
.
target = Result
}
}
}
-
viewWillAppear()
における問題の説明によってデータをロードされたかどうか:
ビューがロードされた後、SubViewControllerの3つの変数に有効な値を割り当てることはできません。
3出力の結果がすべて0
あるしかし、私はdataRequest()
にprint()
を設定した場合、私は有効なカウントを取得することができます。
- 私の質問:
がどのようにAlamofire
はその仕事を終えていることを確認してくださいするには?
ここで私はAlamofire Request機能を置くべきですか? viewWillApper()
? viewDidApper()
?
ParentViewControllerのPrepareForSegue()
でジョブの要求を完了する必要がありますか?
どのようにこの問題を解決を教えてください。
あなたのガイドと時間に大きな感謝。
イーサン・ジョー
あなたの答えと時間をありがとう。私は質問があります:状況を考えてみましょう、私はボタンやsomethingsをParentViewControllerからSubViewControllerに移行するために押します。これは 'prepareForSegue()'を呼び出すことを意味します。もし、私がこのトランジションをトリガするときに 'boolVar'が' false'ならば、あなたの解決策は動作しますか(すべての点で!!!)? Alamofireがデータを取得する前にビューがフリーズするのですか、またはAlamofireがデータを取得するのと同じくらい時間がかかるようにボタンを押す必要がありますか? –
この回答は理にかなっていません。 –