HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 为什么我会收到错误代码= 3840解析JSON?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我是 Swift和iOS开发的新手.我正在测试并学习如何使用远程服务器api.我在尝试身份验证时从Strongloop(LoopBACk)api获取JSON,并且我尝试使用的解析会收到错误

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

我认为实际问题不是在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.httpR_607_11845@ethod = "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)")
   }
}
@H_502_43@

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。