iOS小记--NSCocoaErrorDomain Code=3840

**更新于20200903**

哈哈,才发现是4年前的3月9号写的这个,今天9月3号,这个CallBack还真不错。

言归正传,这个错误挺常见的,但是你一搜索,会出现好多答案让你尝试,但其实遇到的都是不一样的问题。

比如说约定返回就不需要接送 :https://blog.csdn.net/asuno_1/article/details/82225687 

有的是跟Https有关,像这样:

    AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init]         

    [securityPolicy setAllowInvalidCertificates:YES];

在评论区 Lin__Chuan 同学已经说的很明白了,这个错误的问题就是因为返回值不是 Json。导致它的原因多种多样,服务端程序问题返回了错误的内容,或者前端请求的 URL错误,缺失必要参数等等都有可能。当你遇到这个问题时,建议先解析一下那个返回的 NSData,搂一眼,你应该就能找到问题,答案就不言自明了。

NSString *parseData = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];

***************

**以下是原文,写于20160309**

由于项目需要,开始使用AFNetWorking的AFHTTPSessionManager,原谅小弟项目用的还是NSURLConnection。贴点代码

AFJSONRequestSerializer *rqSerializer = [AFJSONRequestSerializer serializerWithWritingOptions:0];//NSJSONWritingPrettyPrinted

rqSerializer.stringEncoding = NSUTF8StringEncoding;

AFJSONResponseSerializer *rsSerializer = [AFJSONResponseSerializer serializer];

rsSerializer.stringEncoding = NSUTF8StringEncoding;

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

manager.responseSerializer = rsSerializer;

manager.requestSerializer = rqSerializer;

通过post请求发出去总是获得下面这样的错误。百度了N多的办法,也没能找到彻底的原因,无奈之下只能戳进去看AF的代码。

Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did

not start with array or object and option to allow fragments not set."

UserInfo={NSDebugDescription=JSON text did not start with array or

object and option to allow  fragments not set.}


找到这么一句话:[mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]];

好在我是对着之前的代码改的,在对比打印了[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]的data和之前

//   NSString *jsonStr1 = [NSString jsonStringWithDictionary:parameters];

//    NSData *data1 = [jsonStr1 dataUsingEncoding:NSUTF8StringEncoding];

之后,发现data不一致,导致发出去的请求服务器那边不识别,这个时候,直觉告诉我json拼的格式有问题,但是iOS官方就提供这么一个方法。找了找API说明,发现了这个

为了好看,NSJSONWritingPrettyPrinted这个模式下生成的son串是带空格的,所以编成data之后长度变长了,服务器那边解不了。尝试了下,把这个参数改成0,就像我上边代码设置的。

AF使用人群那么多,用法啥的就不用介绍了,小弟也才开始用上它,就一个感觉,牛逼的代码就是牛逼。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容