Persist data and pass to multiple views

心不动则不痛 提交于 2019-12-24 14:51:38

问题


I have an app where a user logs in by entering their details and that sends a HTTP GET request to my API which authenticates the user and sends the users data/user object back from the database.

Once this is done, within my HTTP request which is triggered on button tap I send the users data onto the next view and perform a transition to the view by using the following code:

            if let parseJSON = json
            {
                // parseJSON contains the return data. We are programmatically creating a segue between two views
               //  passing data between them.
                dispatch_async(dispatch_get_main_queue())
                    {

                    let storyboard = UIStoryboard(name: "Main", bundle: nil)
                    let vc = storyboard.instantiateViewControllerWithIdentifier("mainView") as! MainViewController
                    var fullname = parseJSON["employeeName"] as! String
                    var job = parseJSON["jobTitle"] as! String
                    var email = parseJSON["email"] as! String
                    vc.username = fullname
                    vc.jobTitle = job
                    vc.userEmail = email
                    self.presentViewController(vc, animated: true, completion: nil)

            }

The above works perfectly.The from my second view I create a prepare for segue for another view where I am trying to pass the user data that was just passed to the 2nd view when the user logged in by using the code below:

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if (segue.identifier == "settings") {
        // pass data to next view
        let viewController = segue.destinationViewController as! SettingsTableViewController
        viewController.username = username
        viewController.jobTitle = jobTitle
    }
}

This again works properly. When I tap on the button to go to view 3 the prepareforsegue function passes the data and shows the following view (ignore email field):

But when I click on the back button and try to access to the same view all the data thats coming from the API and is being passed from View 1 to View 2 to View 3 disappears. See below:

I DO understand the reason why this happening, I am passing data in 1 direction and it is not being saved only being passed from one view to another and when I go back a view that process of passing between breaks and hence the data is lost.

My question is how can I preserve data when the user first logs in and the API sends the data back. Can I save it? and keep passing it through multiple views and still keep it no matter what?

Any help will be greatly appreciated. Thanks in advance.


回答1:


In short : Store the data you get in an instance variable in your view and use that variable for the segues.

Long Explanation: Best practice is to create a model class for the stuff you're getting from your API, put all data in a variable of that class when retrieving the info, and like a said have a variable of that type in your view classes.

Tip: read a bit about the MVC paradigma's (lotsa stuff online, if you have some time read the book Design Patterns by the gang of four)



来源:https://stackoverflow.com/questions/32518715/persist-data-and-pass-to-multiple-views

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!