2016-07-27 66 views
0

得到统计后一旦用户点击登录按钮,我会打电话给FUNC LoginClicked和API获取状态:IOS斯威夫特 - 去到另一个视图从NURLSESSION

func LoginClicked(sender: AnyObject) 
{ 
    data_request{ 
     (response) ->() in 
      let arrResponse = response.componentsSeparatedByString("|") 
      if (arrResponse[2] == "1"){ 
       self.performSegueWithIdentifier("Login", sender: self) 
      } 
      else { 
       let alert = UIAlertController(title: "Login Failed", message: "Invalid Login!", preferredStyle: UIAlertControllerStyle.Alert)   
       alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil))   
       self.presentViewController(alert, animated: true, completion: nil) 
      } 
    } 
} 


func data_request(completion : (response:NSString) ->()){ 
    let txtUI : String = txtUsername!.text! 
    let txtPWD : String = txtPassword!.text! 
    let url = NSURL(string: "http://myweb.net/?UI=\(txtUI)&PW=\(txtPWD)")! 
    let request = NSURLRequest(URL: url) 
    let config = NSURLSessionConfiguration.defaultSessionConfiguration() 
    let session = NSURLSession(configuration: config) 

    let task = session.dataTaskWithRequest(request, completionHandler: { 
     (
     let data, let response, let error) in 

     guard let _:NSData = data, let _:NSURLResponse = response where error == nil else { 
      print("error") 
      return 
     } 

     let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     completion(response : dataString!) 

    }) 
    task.resume() 
} 

如果成功,它会转到另一种观点。否则,显示失败的警报。当致电时,它将会弹出错误BAD_EXECUTION_INSTRUCTION两种情况。

+0

我真的不知道你的代码有什么问题,也许尝试调用'dispatch_get_main_queue()'中的那些? – Tj3n

+0

@ Tj3n你拯救我的一天! –

回答

0

从@ Tj3n得到提示后,它现在可以执行正确的操作。

func data_request(completion : (response:NSString) ->()){ 
    let txtUI : String = txtUsername!.text! 
    let txtPWD : String = txtPassword!.text! 
    let url = NSURL(string: "http://myweb.net/?UI=\(txtUI)&PW=\(txtPWD)")! 
    let request = NSURLRequest(URL: url) 
    let config = NSURLSessionConfiguration.defaultSessionConfiguration() 
    let session = NSURLSession(configuration: config) 

    let task = session.dataTaskWithRequest(request, completionHandler: { 
     (
     let data, let response, let error) in 

     guard let _:NSData = data, let _:NSURLResponse = response where error == nil else { 
      print("error") 
      return 
     } 
    dispatch_async(dispatch_get_main_queue(), { 
       let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
       //let response = dataString?.componentsSeparatedByString("|") 
       //print(dataString) 
       //print(response![2]) 
       let arrResponse = dataString!.componentsSeparatedByString("|") 
       if (arrResponse[2] == "1"){ 
        self.performSegueWithIdentifier("Login", sender: self) 
       } 
       else { 
        let alert = UIAlertController(title: "Login Failed", message: "Invalid Login!", preferredStyle: UIAlertControllerStyle.Alert) 

        alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil)) 

        self.presentViewController(alert, animated: true, completion: nil) 
       } 
      }) 
let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     completion(response : dataString!) 

    }) 
    task.resume() 
}