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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)