2016-04-04 8 views
2

Ich bin ein Neuling in IOS und ich bin in kleinen Projekt. In meinem Projekt muss ich Daten vom Webservice (SOAP) in den Hauptcontroller laden -> Daten in den Seecond-Controller übertragen. Also, vielleicht die Daten laden im Hintergrund Thread, die Methode legte Daten vor der Methode laden. Also, wie kann ich es reparieren? dies ist mein Code:Daten laden in Webservice in IOS

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) 
    } 
} 

Dies ist der Code zeigen: enter image description here

+0

Was muss behoben werden? Was wird erwartet und was passiert eigentlich? – Darko

+0

ich will fixe daten werden zu sealcond controller nach finish method download daten –

+0

wieder: Was muss behoben werden? Was wird erwartet und was passiert eigentlich? – Darko

Antwort

2

Make folgende Änderungen 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 *** 
     } 
    } 
} 

und folgende Änderungen 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. 
    } 
} 

Ich hoffe es ist Ihnen jetzt klar. Happy coding :)

+0

Ich habe Ihren Code und es funktioniert nicht. weil ich "Menu Title" und "MenuIcon" vom webservice herunterladen und in menuViewController einstellen muss. Wenn ich Ihren Code verwende, wird MenuViewController "cellForRowAtIndexPath" ausführen, bevor ich Daten habe. –

+0

Es ist klar geschrieben, dass Sie Aktionen ausführen müssen, sobald Ihre API reagiert. Sie müssen alles einstellen, nachdem Ihre API reagiert hat, und sogar Ihre Tabelle neu laden. –

+0

können Sie mir ein Beispiel geben :(, ich bin sehr neu in swift (eine Woche), also vielen Dank –

Verwandte Themen