Ios 额外参数';错误';随时待命

Ios 额外参数';错误';随时待命,ios,json,swift,nserror,do-catch,Ios,Json,Swift,Nserror,Do Catch,我在调用中收到此错误额外参数“error” 上下文中的代码 var post:NSString = "name=\(Username)&email=\(Email)&phone=\(phonenumb)&password=\(Password)&address=\(address)" NSLog("PostData: %@",post); var url:NSURL = NSURL(string: "http://userregistra

我在调用中收到此错误
额外参数“error”

上下文中的代码

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

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

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

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

    var postLength:NSString = String( postData.length )

    var 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? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError)


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

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

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

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

            var error: NSError?

            let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) 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"
                }
                var alertView:UIAlertView = UIAlertView()
                alertView.title = "Sign Up Failed!"
                alertView.message = error_msg as String
                alertView.delegate = self
                alertView.addButtonWithTitle("OK")
                alertView.show()

            }

        } else {
            var alertView:UIAlertView = UIAlertView()
            alertView.title = "Sign Up Failed!"
            alertView.message = "Connection Failed"
            alertView.delegate = self
            alertView.addButtonWithTitle("OK")
            alertView.show()
        }
    }  else {
        var 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()
   }
第二个

我试过以下方法

do {
    if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary {
        print(jsonResult)
    }
} catch let error as NSError {
    print(error.localizedDescription)
}
但我的结果是一个错误,如下所示

使用未解析的
jsonData

现在有谁能帮我用上面的原始代码添加这个do catch来纠正错误。

更改

var urlData: NSData? = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&reponseError)

改变

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

您的完整代码为:

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 url:NSURL=NSURL(字符串:http://userregistration.php")!
让postData:NSData=post.dataUsingEncoding(NSASCIIStringEncoding)!
让postLength:NSString=String(postData.length)
let请求:NSMutableURLRequest=NSMutableURLRequest(URL:URL)
request.HTTPMethod=“POST”
request.HTTPBody=postData
setValue(postLength为字符串,forHTTPHeaderField:“内容长度”)
request.setValue(“application/x-www-form-urlencoded”,forHTTPHeaderField:“内容类型”)
request.setValue(“application/json”,forHTTPHeaderField:“Accept”)
让我们回复错误:N错误?
var响应:nsurresponse?
做{
让urlData=try?NSURLConnection.sendSynchronousRequest(请求、返回响应:&response)
if(urlData!=nil){
让res=响应为!NSHTTPURLResponse!;
NSLog(“响应代码:%ld”,res.statusCode);
如果(res.statusCode>=200&&res.statusCode<300)
{
让responseData:NSString=NSString(数据:urlData!,编码:NSUTF8StringEncoding)!
NSLog(“响应==>%@”,响应数据);
做{
让jsonData=try NSJSONSerialization.JSONObjectWithData(urlData!,选项:[])作为!NSDictionary
让success:NSInteger=jsonData.valueForKey(“success”)作为!NSInteger
//[jsonData[@“success”]integerValue];
NSLog(“成功:%ld”,成功);
如果(成功==1)
{
NSLog(“注册成功”);
self.dismissViewControllerAnimated(真,完成:无)
}否则{
var错误消息:NSString
如果jsonData[“错误消息”]为?NSString!=nil{
error\u msg=jsonData[“error\u message”]as!NSString
}否则{
错误\u msg=“未知错误”
}
让alertView:UIAlertView=UIAlertView()
alertView.title=“注册失败!”
alertView.message=错误消息为字符串
alertView.delegate=self
alertView.addButtonWithTitle(“确定”)
alertView.show()
}
}将let错误捕获为NSError{
打印(“json错误:\(error.localizedDescription)”)
}
}否则{
让alertView:UIAlertView=UIAlertView()
alertView.title=“注册失败!”
alertView.message=“连接失败”
alertView.delegate=self
alertView.addButtonWithTitle(“确定”)
alertView.show()
}
}
}

您应该知道,
NSURLConnection
已被弃用。请使用
NSURLSession
支持新版iOS。以下是代码:

func postRequestWithFormData(strUrl: String, param: NSDictionary?, completionHandler: (responseData: NSDictionary?, error: NSError?) -> ()) -> (){

    if isConnectedToNetwork(){

        let url = NSURL(string: strUrl)!
        let config = NSURLSessionConfiguration.defaultSessionConfiguration()
        let session = NSURLSession(configuration: config)

        let request = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "POST"
        request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData

        var paramString = String()

        for (key, value) in param! {
            paramString = paramString + (key as! String) + "=" + (value as! String) + "&"
        }

        request.HTTPBody = paramString.dataUsingEncoding(NSUTF8StringEncoding)

        let task = session.dataTaskWithRequest(request) {data, response, error -> Void in

            dispatch_async(dispatch_get_main_queue(), { () -> Void in

                do{
                    if data != nil{

                        let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as? NSDictionary

                        if let parseJSON = json {

                            // Parsed JSON
                            completionHandler(responseData: parseJSON, error: nil)
                        }
                        else {
                            // Woa, okay the json object was nil, something went worng. Maybe the server isn't running?
                            let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)

                            #if DEBUG
                                print("Error could not parse JSON: \(jsonStr)")
                            #endif
                        }
                    }else{

                        completionHandler(responseData: nil, error: error)
                    }

                }catch let error as NSError{

                    print(error.localizedDescription)
                    completionHandler(responseData: nil, error: error)
                }
            })
        }

        task.resume()
    }else{
        //Alert No Internet Connection
    }
}
如果您仍然面临任何错误,请告诉我

用法


如何在我的按钮操作clikc上调用此函数
let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as NSDictionary
let jsonData = try NSJSONSerialization.JSONObjectWithData(urlData!, options: []) as! NSDictionary
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()
            }
        }
    }
func postRequestWithFormData(strUrl: String, param: NSDictionary?, completionHandler: (responseData: NSDictionary?, error: NSError?) -> ()) -> (){

    if isConnectedToNetwork(){

        let url = NSURL(string: strUrl)!
        let config = NSURLSessionConfiguration.defaultSessionConfiguration()
        let session = NSURLSession(configuration: config)

        let request = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "POST"
        request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData

        var paramString = String()

        for (key, value) in param! {
            paramString = paramString + (key as! String) + "=" + (value as! String) + "&"
        }

        request.HTTPBody = paramString.dataUsingEncoding(NSUTF8StringEncoding)

        let task = session.dataTaskWithRequest(request) {data, response, error -> Void in

            dispatch_async(dispatch_get_main_queue(), { () -> Void in

                do{
                    if data != nil{

                        let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as? NSDictionary

                        if let parseJSON = json {

                            // Parsed JSON
                            completionHandler(responseData: parseJSON, error: nil)
                        }
                        else {
                            // Woa, okay the json object was nil, something went worng. Maybe the server isn't running?
                            let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)

                            #if DEBUG
                                print("Error could not parse JSON: \(jsonStr)")
                            #endif
                        }
                    }else{

                        completionHandler(responseData: nil, error: error)
                    }

                }catch let error as NSError{

                    print(error.localizedDescription)
                    completionHandler(responseData: nil, error: error)
                }
            })
        }

        task.resume()
    }else{
        //Alert No Internet Connection
    }
}
postRequestWithFormData(appConstants.BASEURL + appConstants.API_USER_SIGN_IN, param: paramaters) { (responseData, error) in

        if responseData != nil && error == nil{                
            if responseData!.valueForKey("response_status") as! String == "0"{
                helperInstance.showSingleAlert(responseData!.valueForKey("message") as! String)
            }else if responseData!.valueForKey("response_status") as! String == "1"{
              //Getting Data
            }
        }else if error != nil{
//Error Received
            }
        }