2016-07-07 11 views
-2

私は2つのviewControllers:LoginViewControllerとNextViewControllerを持っています。アプリケーションが実行されると、LoginViewControllerは、HTTPリクエストで認証を処理する完了ハンドラを実行し、完了後、必要なユーザデータを取得する別のクロージャを呼び出します。iOS Swift:ビューと完了ハンドラ間でデータを渡す

バックグラウンドでHTTPリクエストを実行しているときにデータが利用可能になったときを知る方法がないため、コールバック関数からNextViewControllerに戻ってデータを渡す方法がわかりません。

それでデータが入手可能になったら、私はどのように提示するべきですか?

私はnextViewController内でユーザー情報を取得するための2番目のコールバックメソッドを呼び出すことができますが、これによりアプリケーションの処理速度が低下します。

は、ここでのコード例です:

class Methods: NSObject { 

    //Singleton 
    class func sharedInstance() -> Methods { 
     struct Singleton { 
      static var sharedInstance = Methods() 
     } 
     return Singleton.sharedInstance 
    } 


    private func GETMethod(callBackMethod: (Success: Bool) -> Void) { 
     //Do the authentication 
    } 

    private func retriveUserData(callBackMethod: (data: String, Success: Bool) -> Void) { 
     //Gets the data and passes processed data back in a callBackMethod 
    } 

    func doAuthentication(callBackMethod: (Success: Bool) -> Void){ 
     GETMethod { (Success) in 

      if Success { 
       self.retriveUserData({ (data, Success) in 


        data // <- HOW DO I GET THIS INTO LOGIN VIEW CONTROLLER? 


        callBackMethod(Success: true) 
       }) 
      } 
     } 
    } 
} 


class LoginViewController: UIViewController { 

    func loginButtonPressed(){ 
     Methods.sharedInstance().doAuthentication { (Success) in 

     } 
    } 

} 

class NextViewController: UIViewController { 

    //Present data when it becomes available 
} 

答えて

1

MVCパターン、特に "モデル" の部分を使用することを検討してください。アプリケーションの共有データモデルとして機能するオブジェクトを作成します。新しいデータがあるときにそれを更新してください。更新のタイミングとコントローラの読み込みに応じて、データが変更されたときに通知を送信するか、関心のあるオブジェクト(コントローラ)が現在の状態を調べるためにクエリできるAPIを提供することができます。

関連する問題