ios - 如何将 JSON 数据从登录 View 传递到多 View Controller ,是否可能?

标签 ios swift3 oauth-2.0 alamofire swifty-json

我正在尝试使用 perfrom segue 在两个不同的 View Controller 中传递 JSON 数据,并且很容易将数据传递到单个 View Controller ,或者是否可能?

func getlogin(){
        let headers = [
            "Content-Type": "application/x-www-form-urlencoded"
        ]
        let parameters = [

            "UserName": username_textfield.text! as String,
            "Password": password_textfield.text! as String,
            "grant_type": "password",
            ]


        //        let url = NSURL(string: "http://192.168.100.5:84/Token")!
        Alamofire.request("http://192.168.100.5:84/Token", method: .post, parameters: parameters, encoding:  URLEncoding.httpBody, headers: headers).responseJSON { (response:DataResponse<Any>) in

            switch(response.result) {
            case.success(let data):
                print("success",data)
                 let statusCode = (response.response?.statusCode)!

//                self.myResponse = JSON(data)
//                let login = Login(loginJson: self.myResponse)

                if statusCode == 200{
                    self.view.makeToast(message: "Welcome !!")

                    self.myResponse = JSON(data)
                    let login = Login(loginJson: self.myResponse)
                    DispatchQueue.main.async(execute: { () -> Void in
                        self.performSegue(withIdentifier: "dashboard", sender: login)
                        self.performSegue(withIdentifier: "rear_view", sender: login)

                    })

//
                }else{
                    self.view.makeToast(message: "Username or password invalid")
                }



            case.failure(let error):
                print("Not Success",error)
                self.view.makeToast(message: "Server Error!!")
            }

        }
    }

我准备从我试图传递我的 JSON 数据的地方转场?

override  func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "dashboard" {
            let navController = segue.destination as! UINavigationController
            if let detailController = navController.topViewController as? ViewController,
                let loginData = sender as? Login {
                detailController.login_details = loginData
            }


 }
    if segue.identifier == "rear_view" {

        let navController = segue.destination as! UINavigationController
        if let dc = navController.topViewController as? MenuDrawerViewController,
                        let loginData = sender as? Login {
                        dc.login_details = loginData
                    }

    }
}

当用户登录时,JSON 数据传递给 viewController 但不传递给 MenuViewController,尝试在两个 View Controller 中传递数据,这个问题如何解决?或者需要一些建议?

最佳答案

由于您只能转至一个 Controller ,因此您不能在prepare(for segue) 中将数据直接传递给多个ViewController。 但是,您可以使用多种方法在多个 View Controller 之间传递数据。

  1. 将数据保存在磁盘上,如果它不是太复杂和太大,您可以将其存储在初始 View Controller 的 UserDefaults 中,然后从您的 View Controller 访问 UserDefaults其他两个 View Controller 。如果数据更复杂,您可能必须使用数据库框架(例如 Realm 或 CoreData)。
  2. 如果您不需要将数据传递给特定的类实例,您可以创建类的静态属性,您可以从所有 View Controller 访问这些实例。
  3. 从第一个 View Controller 通过 segue 传递两个 View Controller 所需的数据,然后在从第二个 View Controller 进行 segue 时传递第三个 View Controller 所需的数据。但是,这仅适用于少数 View Controller ,并且仅当您只能从之前向其发送数据的 View Controller 切换到 View Controller 时。

编辑:使用静态属性的例子:

class FirstVC: UIViewController {  //this is your initial view controller
    ...
    let login = Login(loginJson: self.myResponse)
                ThirdVC.login = loginData
                DispatchQueue.main.async(execute: { () -> Void in
                    self.performSegue(withIdentifier: "dashboard", sender: login)
                })
    ...
}

class SecondVC: UIViewController {  // you segue here from FirstVC

}

class ThirdVC: UIViewController { //you segue here from SecondVC
    static var login: Login?
    override function viewDidLoad(){
       super.viewDidLoad()
       print(ThirdVC.login) // you can access the data sent from your FirstVC like this anywhere in ThirdVC.
    }
}

关于ios - 如何将 JSON 数据从登录 View 传递到多 View Controller ,是否可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44821440/

相关文章:

c++ - iOS 处理强制应用程序退出的正确方法是什么

ios - Swift:删除 UIButton attributedTitle

swift - Alamofire 4 - 无法调用非函数类型 HTTPURLResponse 的值

authentication - Google OAuth 2 授权 - 错误 : redirect_uri_mismatch

java - Postman oAuth2 错误未经授权的授权类型

python - 安装了 mitmproxy OSX 但找不到 .mitproxy 目录

ios - 谷歌 Flatbuffer iOS

ios - Swift 3.0 中的 POST 请求

ios - 将 HKSample 与另一个 HKSample 进行比较以防止重复

oauth-2.0 - Keycloak Google 身份提供商错误 : "Identity token does not contain hosted domain parameter"