2016-12-14 10 views
-5

私は2つのアクティブ状態に向けられたボタンを最初のVCに持っています。 FirstVC NOW最初に来たのは誰ですか? IBActionまたはViewDidLoad

@IBAction func buttonPressed(_ sender: Any) { 

    Alamofire.request("http://localhost/AIT/attempt3.php",method: .post, parameters: ["something": semValue, "branch" : streamValue]) 
     .responseJSON { response in 
      print(response.result) 

      if let JSON1 = response.result.value { 
       print("Did receive JSON data: \(JSON1)") 
       // JSONData.someData = JSON1 as AnyObject? 
       UserDefaults.standard.set(JSON1, forKey: "PostData") 
       UserDefaults.standard.synchronize() 
      } 
      else { 
       print("JSON data is nil.") 
      } 

    } 
} 

1)SecondVC

override func viewDidLoad() { 
    super.viewDidLoad() 
    subjectPickerView.dataSource = self 
    subjectPickerView.delegate = self 
    SwiftyRequest() 
    // Used the text from the First View Controller to set the label 
} 

func SwiftyRequest(){ 
    print("SecondViewController METHOD BEGINS") 
    let jsonobj = UserDefaults.standard.object(forKey: "PostData") 
    let json = JSON(jsonobj as Any) 
     for i in 0 ..< json.count{ 
      let arrayValue = json[i]["name"].stringValue 
      print(arrayValue) 
      self.subjects.append(arrayValue) 
      self.subjectPickerView.reloadAllComponents() 
     } 
    print(self.subjects) 
} 

2)IBAction、私はボタンを押すたびに、それは私のために少し問題があるFirstVCIBActionSecondVCviewDidLoadを呼び出しますアプリ!どのようにしてこれらの2つの機能の優先順位を決めることができますか。

+0

あなたは 'Storyboard'でリンクしましたか?常に最初に呼び出されたviewDidLoadメソッド。それはライフサイクルであるVC – PiyushRathi

+0

*遅延*の主な理由は、 'Alamofire'リクエストの非同期動作です。とにかく、 'UserDefaults'を使用してコントローラ間でデータを渡すことを強くお勧めします。 – vadian

+0

これらの関数が呼び出される順序に注目するべきではありません。あなたはそれを*問題ではない*という順序で書くべきです。 –

答えて

0

あなたは何をしたいのか考える必要があります。明らかにAlamofireの呼び出しには時間がかかるでしょう。その時間が経過している間、第2のVCで何をしたいですか?電話がまったく返ってこない場合は、何をしたいですか?

これは、外部リソースに依存する場合の一般的な問題です。どのようにUIを管理していますか? UIを部分的な状態で表示しますか?あなたは "読み込み中"のようなものを言っているポップオーバーを入れますか?それとも、2番目のVCを提示する前にリソースが完了するのを待つのですか?

要件に応じて決定することはできません。しかし、それぞれを実装する方法があります。リソースが通常迅速に応答する場合は、VCを部分的な状態にして、何らかのコールバックでそのVCを設定することができます。通常、コールバックは、(1)ブロック(2)デリゲートメソッドまたは(3)通知です。 (あまり一般的ではない)(4)KVOもある。おそらくそれぞれの賛否両論を研究するべきです。

関連する問題