-1

i have tried loads of different methods, normally the code i use works. However in this case im not sure if its to do with the code from the tutorial that i have used. They have used https instead of http. I have tried different methods im not sure what to do! any advice would be appreciated.

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

}

rmaddy
  • 314,917
  • 42
  • 532
  • 579
  • 1
    Unrelated to your issue but you could definitely move that alertView creation and showing into a helper method and call it instead of having so much duplicate alertView creation code. – Will M. Apr 28 '16 at 16:51
  • 1
    Possible duplicate of [How do I load an HTTP URL with App Transport Security enabled in iOS 9?](http://stackoverflow.com/questions/30731785/how-do-i-load-an-http-url-with-app-transport-security-enabled-in-ios-9) – Mate Hegedus Apr 28 '16 at 17:58

1 Answers1

0

I suggest setting the CFNETWORK_DIAGNOSTICS environment variable to 3, running your app, and seeing what errors it logs. That should give you some indication about what's going wrong.

Odds are, your ATS exception is wrong in some subtle way.

dgatwood
  • 10,129
  • 1
  • 28
  • 49