iOS的JSON错误:NSDebugDescription =结束时的垃圾

这是一个非常奇怪的错误,当从我的服务器(它是通过PHP生成的)抓取JSON时,调用时出现此错误:

json = [NSJSONSerialization JSONObjectWithData:kivaData options:kNilOptions error:&jsonError]; 

JSON错误:错误域= NSCocoaErrorDomain代码= 3840“操作无法完成。(cocoa错误3840.)”(垃圾在结束。)UserInfo = 0x178467d00 {NSDebugDescription =垃圾在结束。}

我的(NSData * kivaData)抓住了一切,但它无法parsingJSON。

我已经在http://jsonlint.com/运行我的JSON代码,它出来每次都有效。

它真的很奇怪,因为它可以parsingJSON当我连接到无线上网,但是当我尝试通过手机,它不会工作。 它确实在某些人的手机上通过手机工作,但每次都是这样。

编码是非常重要的。 如果你的json是有效的,那么问题可能是你的json数据中有特殊字符,json序列化程序没有正确parsing。 发送数据时,请确保在发送内容时使用正确的url编码,以便客户端正确parsing。 总是使用utf-8或者base64。

通过在响应之前发送内容长度报头,我能够解决同样的问题(在wifi上工作,但不在运营商networking上)

 header("Content-length: ".strlen($response)); echo $response; exit; 

我结束了不得不改变我的PHP文件回声json语法简单地输出与json_encode。

JsonData通常以字典格式存储。 由于json不能parsing连续的数据(它不能分离响应)抛出这个错误。

您可以维护一个字典来存储从服务器获得的响应。 每个任务将有一个唯一的答复。 因此创build一个字典,其中“keys”为任务的“taskIdentifier”,“values”为“data”。

例如:内部didReceiveData或任何其他等效的方法[你从服务器得到响应]存储响应字典与taskIdentifier作为关键。

  NSString *taskID = [@(dataTask.taskIdentifier) stringValue]; [_task_data_dictionary setObject:data forKey:taskID]; 

这里_task_data_dictionary是字典。这样你就可以摆脱上面的错误。

在此之后,您可以使用此代码使用相同的字典获取数据

  NSData *data = [_task_data_dictionary objectForKey:taskNumber]; 

再次使用taskIdentifier。

希望这可以帮助 。

Interesting Posts