ios – 为什么我会收到错误代码= 3840解析JSON?

ios – 为什么我会收到错误代码= 3840解析JSON?,第1张

概述我是 Swift和iOS开发的新手.我正在测试并学习如何使用远程服务器api.我在尝试身份验证时从Strongloop(Loopback)api获取JSON,并且我尝试使用的解析收到错误: Error Domain=NSCocoaErrorDomain Code=3840 “The operation couldn’t be completed. (Cocoa error 3840.)” (No 我是 Swift和iOS开发的新手.我正在测试并学习如何使用远程服务器API.我在尝试身份验证时从Strongloop(Loopback)API获取JsON,并且我尝试使用的解析会收到错误:

Error Domain=NSCocoaErrorDomain Code=3840 “The operation Couldn’t be completed. (Cocoa error 3840.)” (No value.) UserInfo=0x7fd623e38870 {NSDeBUGDescription=No value.}

这是字符串中的返回值,我显然从Loopback获得了正确的JsON响应,一个身份验证令牌,ttl,date和userID:

{“ID”:”BHzKnjrbUPn9KSC1GegQTNHJFNwfuifNXPfZuKkYxC5IwRDEHuerurvSdBMzzrVi”,”ttl”:1209600,”created”:”2015-07-03T13:04:39.791Z”,”userID”:2}

我认为实际问题不是在parseJsON方法中发生,而是在performLoginRequestWithURL方法中发生.它返回一个空字符串.与异步请求有关.我注意到Json字符串变量在从方法返回之后才会被设置,因此它返回空白.如果我放两个println(Json)方法,一个在异步请求中,一个在它之后,一个先打印.这在某种程度上是有道理的,但我不知道如何解决这个问题.我需要从帖子中返回Json,但我不知道如何捕获它.有些东西告诉我我需要使用同步请求,但我不知道如何在这个从POST请求获取Json的上下文中这样做.

这是我的代码:

//Login button pressed@IBAction func login() {    //Gets url string    let url = getLogin()    //posts url with UITextFIEld data.    if let JsonString = performLoginRequestWithURL(url) {        //Error occurs in the parseJsON method        if let dictionary = parseJsON(JsonString) {            /*            if let at = dictionary["ID"] as? String {                accesstoken = at            }            if let ID = dictionary["userID"] as? Int {                println(ID)            }            */        }    }}func getLogin() -> NSURL {    let toEscape = "http://localhost:3000/API/Users/login"    let urlString = toEscape.stringByAddingPercentEscapesUsingEnCoding(NSUTF8StringEnCoding)!    let url = NSURL(string: urlString)    return url!}func performLoginRequestWithURL(url: NSURL) -> String? {    let bodyData = "username=\(textEmail.text)&password=\(textPW.text)"    var request: NSMutableURLRequest = NSMutableURLRequest(URL: url)    var Json = ""    request.httpMethod = "POST"    request.httpBody = bodyData.dataUsingEnCoding(NSUTF8StringEnCoding)    NSURLConnection.sendAsynchronousRequest(request,queue: NSOperationQueue.mainQueue()){        response,data,error in        if data != nil {            Json = Nsstring(data: data,enCoding: NSUTF8StringEnCoding) as! String        }        println(Json)    }    return Json}func parseJsON(JsonString: String) -> [String: AnyObject]? {    if let data = JsonString.dataUsingEnCoding(NSUTF8StringEnCoding) {        var error: NSError?        if let Json = NSJsONSerialization.JsONObjectWithData(data,options: NSJsONReadingOptions(0),error: &error) as? [String: AnyObject] {            return Json        } else if let error = error {            //Here's where the error comes back.            println("JsON Error: \(error)")        } else {            println("UnkNown JsON Error")        }    }    return nil}
解决方法 必须从NSURLConnection.sendAsynchronousRequest完成块调用parseJsON方法,而不是在发出异步请求之后,通常没有响应.

if data != nil {    Json = Nsstring(data: data,enCoding: NSUTF8StringEnCoding) as! String    println("Json: \(Json)")    if let dictionary = parseJsON(JsonString) {        println("dictionary: \(dictionary)")   }}
总结

以上是内存溢出为你收集整理的ios – 为什么我会收到错误代码= 3840解析JSON?全部内容,希望文章能够帮你解决ios – 为什么我会收到错误代码= 3840解析JSON?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1061515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存