ios - 在IOS中的webservice中加载数据

标签 ios swift web-services asynchronous

我是 IOS 的新手,正在进行一个小项目。在我的项目中,我必须从主 Controller 中的 Web 服务(SOAP)加载数据 -> 将数据放入第二个 Controller 。 因此,也许数据在后台线程中加载,该方法将数据在加载方法之前运行。那么我该如何修复它呢? 这是我的代码:

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

这是代码显示: enter image description here

最佳答案

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

以及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.
    }
}

我希望您现在已经清楚了。快乐编码:)

关于ios - 在IOS中的webservice中加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36394330/

相关文章:

ios - 如何将导航栏或其他东西放在 XLPagerTabStrip 上方

objective-c - 更新后,应用程序不会从文档文件夹加载现有文件

ios - Xcode 快疯了!在编码时,丢失类、引用并且不会自动完成,经常给出 <<error type>>

ios - 如何让动画重复一定次数?

javascript - 将数组中的值插入到基于键的 SOAP 消息中

c# - 构建完整的 Web 服务、网站和 iPhone 应用程序

python - Python 3 的 SOAP 客户端

ios - executefetchrequest 导致崩溃

ios - AVPlayer 和 MPMoviePlayerController 的区别

ios - 如何以编程方式触发/强制同步 IOS 提醒?