Evan Ngo
Evan Ngo

Reputation: 254

Load Data in webservice in IOS

I'm a newbie in IOS and i'm in small project. In my project i have to load data from Webservice (SOAP) in main controller -> put Data to seacond controller. So, maybe the data load in background thread, the method put data run before the load method. So how i can fix it? this is my code:

class MainRevealController: SWRevealViewController {
var conectData:ConnectData = ConnectData()
var menuTitle:[String] = []
var menuIcon:[String] = []
override func viewDidLoad() {
    super.viewDidLoad()
    self.conectData.DemoSVNew("", key: "", commandType: "Menu", version: "") { (stringData) in
        print("Hello I'm Loading Data")
        let dataArray = stringData.componentsSeparatedByString("|")
        let decodedData = NSData(base64EncodedString: dataArray[2], options: NSDataBase64DecodingOptions(rawValue: 0))
        let decodedString = NSString(data: decodedData!, encoding: NSUTF8StringEncoding)
        let dataArr = decodedString!.componentsSeparatedByString("<row>")
        for i in 0...dataArr.count-1 {
            let menu = dataArr[i].componentsSeparatedByString("|")
            self.menuTitle.append(menu[3])
            self.menuIcon.append(menu[4])
        }
        print("LoadData :",self.menuIcon.count)
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "sw_rear" {
        let mSegue = segue.destinationViewController as! MenuController
        mSegue.menuTitle = menuTitle
        mSegue.menuIcon = menuIcon
        print("icon :",self.menuIcon.count)
        print("title :",self.menuIcon.count)
    }
}

this is the code show : enter image description here

Upvotes: 2

Views: 459

Answers (1)

Dipen Panchasara
Dipen Panchasara

Reputation: 13600

Make following changes in MainRevealController.

class MainRevealController: SWRevealViewController {
      override func viewDidLoad() {
        super.viewDidLoad()
        // *** Removed your API call from here as before it returns result you are on `MenuController` ***
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "sw_rear" {
            let mSegue = segue.destinationViewController as! MenuController
            // *** No need to pass data here, as your data is loaded in `MenuController` itself ***
        }
    }
}

and following changes in MenuController.

class MenuController {

    var conectData:ConnectData = ConnectData()
    var menuTitle:[String] = []
    var menuIcon:[String] = []

    override func viewDidLoad() {
        super.viewDidLoad()

        // *** Call your API here for menu items and perform action on result ***
        self.conectData.DemoSVNew("", key: "", commandType: "Menu", version: "") { (stringData) in
            print("Hello I'm Loading Data")
            let dataArray = stringData.componentsSeparatedByString("|")
            let decodedData = NSData(base64EncodedString: dataArray[2], options: NSDataBase64DecodingOptions(rawValue: 0))
            let decodedString = NSString(data: decodedData!, encoding: NSUTF8StringEncoding)
            let dataArr = decodedString!.componentsSeparatedByString("<row>")
            for i in 0...dataArr.count-1 {
                let menu = dataArr[i].componentsSeparatedByString("|")
                self.menuTitle.append(menu[3])
                self.menuIcon.append(menu[4])
            }
            print("LoadData :",self.menuIcon.count)

            // *** Do somethign with your API result ***
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

I hope its clear to you now. Happy coding :)

Upvotes: 2

Related Questions