2016-07-27 22 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() 
}