2016-04-28 60 views
-1

我已經嘗試了不同方法的加載,通常我使用的代碼工作。然而在這種情況下,我不確定它是否與我使用的教程中的代碼有關。他們使用https而不是http。我已經嘗試過不同的方法,我不知道該怎麼做!任何意見,將不勝感激。不斷收到http傳輸安全錯誤,即使我已經添加了代碼來繞過安全

@IBAction func signinTapped(sender : UIButton) { 
    let username:NSString = txtUsername.text! 
    let password:NSString = txtPassword.text! 

    if (username.isEqualToString("") || password.isEqualToString("")) { 

     let alertView:UIAlertView = UIAlertView() 
     alertView.title = "Sign in Failed!" 
     alertView.message = "Please enter Username and Password" 
     alertView.delegate = self 
     alertView.addButtonWithTitle("OK") 
     alertView.show() 
    } else { 

     do { 
     let post:NSString = "username=\(username)&password=\(password)" 

     NSLog("PostData: %@",post); 
      let url = NSURL(string:"http://") 

     let postData:NSData = post.dataUsingEncoding(NSASCIIStringEncoding)! 

     let postLength:NSString = String(postData.length) 

     let request:NSMutableURLRequest = NSMutableURLRequest(URL: url!) 
     request.HTTPMethod = "POST" 
     request.HTTPBody = postData 
     request.setValue(postLength as String, forHTTPHeaderField: "Content-Length") 
     request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
     request.setValue("application/json", forHTTPHeaderField: "Accept") 


     var reponseError: NSError? 
     var response: NSURLResponse? 

     var urlData: NSData? 
     do { 
      urlData = try NSURLConnection.sendSynchronousRequest(request, returningResponse:&response) 
     } catch let error as NSError { 
      reponseError = error 
      urlData = nil 
     } 

     if (urlData != nil) { 
      let res = response as! NSHTTPURLResponse!; 

      NSLog("Response code: %ld", res.statusCode); 

      if (res.statusCode >= 200 && res.statusCode < 300) 
      { 
       let responseData:NSString = NSString(data:urlData!, encoding:NSUTF8StringEncoding)! 

       NSLog("Response ==> %@", responseData); 

       //var error: NSError? 

       let jsonData:NSDictionary = try NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers) as! NSDictionary 


       let success:NSInteger = jsonData.valueForKey("success") as! NSInteger 

       //[jsonData[@"success"] integerValue]; 

       NSLog("Success: %ld", success); 

       if(success == 1) 
       { 
        NSLog("Login SUCCESS"); 

        let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults() 
        prefs.setObject(username, forKey: "USERNAME") 
        prefs.setInteger(1, forKey: "ISLOGGEDIN") 
        prefs.synchronize() 

        self.dismissViewControllerAnimated(true, completion: nil) 
       } else { 
        var error_msg:NSString 

        if jsonData["error_message"] as? NSString != nil { 
         error_msg = jsonData["error_message"] as! NSString 
        } else { 
         error_msg = "Unknown Error" 
        } 
        let alertView:UIAlertView = UIAlertView() 
        alertView.title = "Sign in Failed!" 
        alertView.message = error_msg as String 
        alertView.delegate = self 
        alertView.addButtonWithTitle("OK") 
        alertView.show() 

       } 

      } else { 
       let alertView:UIAlertView = UIAlertView() 
       alertView.title = "Sign in Failed!" 
       alertView.message = "Connection Failed" 
       alertView.delegate = self 
       alertView.addButtonWithTitle("OK") 
       alertView.show() 
      } 
     } else { 
      let alertView:UIAlertView = UIAlertView() 
      alertView.title = "Sign in Failed!" 
      alertView.message = "Connection Failure" 
      if let error = reponseError { 
       alertView.message = (error.localizedDescription) 
      } 
      alertView.delegate = self 
      alertView.addButtonWithTitle("OK") 
      alertView.show() 
     } 
     } catch { 
      let alertView:UIAlertView = UIAlertView() 
      alertView.title = "Sign in Failed!" 
      alertView.message = "Server Error" 
      alertView.delegate = self 
      alertView.addButtonWithTitle("OK") 
      alertView.show() 
     } 
    } 

} 

func textFieldShouldReturn(textField: UITextField) -> Bool { //delegate method 
    textField.resignFirstResponder() 
    return true 
} 

}

+1

與您的問題無關,但您可以將該alertView創建並顯示爲幫助程序方法並將其調用並調用它,而不是創建具有如此多重複的alertView創建代碼。 –

+1

可能的重複[如何在iOS 9中啓用啓用App Transport Security的HTTP URL?](http://stackoverflow.com/questions/30731785/how-do-i-load-an-http-url-with啓用功能於IOS-9 -app運輸安全) –

回答

0

我建議環境變量設置CFNETWORK_DIAGNOSTICS 3,運行你的應用程序,看到它記錄了什麼錯誤。這應該給你一些關於發生了什麼問題的跡象。

可能性是,您的ATS異常以某種微妙的方式出錯。