iOS小记--NSCocoaErrorDomain Code=3840

由于项目需要,开始使用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使用人群那么多,用法啥的就不用介绍了,小弟也才开始用上它,就一个感觉,牛逼的代码就是牛逼。

你可能感兴趣的:(iOS小记--NSCocoaErrorDomain Code=3840)