注册时获取可选值崩溃

时间:2016-08-09 08:23:51

标签: ios swift

当我尝试注册时,我得到了正确的回复。但是在获得成功之后。我将崩溃视为可选值。

这是我的完整代码:

   var post:NSString = "name=\(Username)&email=\(Email)&phone=\(phonenumb)&password=\(Password)&address=\(address)"

    NSLog("PostData: %@",post);

    var url:NSURL = NSURL(string: "http://userregistration.php")!
   // let url:NSURL = NSURL(string: "http://userregistration.php")!

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


    let reponseError: NSError?
    var response: NSURLResponse?

    do {
        let urlData = try? NSURLConnection.sendSynchronousRequest(request, returningResponse: &response)

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


                do {
                    let jsonData = try NSJSONSerialization.JSONObjectWithData(urlData!, options: []) as! NSDictionary

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

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

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

                    if(success == 1)
                    {
                        NSLog("Sign Up SUCCESS");
                        //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 Up Failed!"
                        alertView.message = error_msg as String
                        alertView.delegate = self
                        alertView.addButtonWithTitle("OK")
                        alertView.show()

                    }

                } catch let error as NSError {
                    print("json error: \(error.localizedDescription)")
                }



            } else {
                let alertView:UIAlertView = UIAlertView()
                alertView.title = "Sign Up Failed!"
                alertView.message = "Connection Failed"
                alertView.delegate = self
                alertView.addButtonWithTitle("OK")
                alertView.show()
            }
        }

    }
}

我在这一行中遇到了崩溃:

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

错误是选项值崩溃。我不知道如何处理这个错误。有任何专家请给我一些想法或一些解决方案以纠正此崩溃

2 个答案:

答案 0 :(得分:0)

始终使用安全展开,并且不要直接尝试打开/转换可能为零的值。

正确的方法是 -

if let successVal = jsonData["success"] as? NSInteger {
   //Do something with successVal. 
}

虽然与您的问题没有直接关系,但想要指出您使用已弃用的NSURLConnection API,而是使用基于NSURLSession的API进行联网。

感谢

答案 1 :(得分:0)

查看回复,您将不会收到任何success,但只有status,您确定无法检查该值吗?

另外,我建议您将代码移动到:

guard let success = jsonData.valueForKey("success") as? Int else {
asset('Check your response, is missing success key')
return
}