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。
希望这可以帮助 。