iOS开发关于使用AFN遇到的问题总结

1.在postman中测试以及安卓那边请求服务器完全ok,iOS就输出以下错误:

Error Domain=NSCocoaErrorDomain Code=3840 "Garbage at end." UserInfo={NSDebugDescription=Garbage at end.}

解决方法:让服务器开发人员多返回了不该返回的数据,将这些文件删除就可以正常访问了。

2.控制台打印:

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.}

第一种原因:查看你的Url是否填写正确
第二种原因:AFN网络请求返回的是json数据,出现这个类型的错误,说明返回的是非json格式,在你封装的网络请求基类中查看是否,添加以下代码:

//设置返回数据格式为JSON
 manager.responseSerializer=[AFHTTPResponseSerializer serializer];

但是注意:如果设置了该属性,直接打印服务器返回的responseobjct是data格式,需要格式化一下,才能更清晰的看到服务器响应的数据结构

[[self shareManager] POST:url parameters:params success:^(AFHTTPRequestOperation * operation, id responseObject) {
      NSLog(@"服务器response success=====%@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);
 } failure:^(AFHTTPRequestOperation * operation, NSError * error) {
 NSLog(@"服务器response error==%@",error);
  }];

3.使用AFN post提交json格式数据
正常情况下,我们只要传输一个字典模式的数据给后台就可以,但是如果提交一个表单数据,数据格式比较复杂,包含数组,我们还是传输一个字典的格式,后台无法解析我们传输的数组数据,但是将字典转json数据,也是不行的,需要将AFN的请求格式设置为json:

+ (AFHTTPRequestOperationManager *)shareManager{
    @synchronized(self){
        if (_manager == nil ) {
            _manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:TLPServerAddress]];
            _manager.responseSerializer = [AFHTTPResponseSerializer serializer];
            _manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"image/jpeg",@"image/jpg",@"image/png",@"application/octet-stream",@"text/json",@"application/json",@"text/javascript",nil];
 _manager.requestSerializer=[AFJSONRequestSerializer serializer];
        }
    }
    return _manager;
}

数组或者字典转json字符串的方法

+ (NSString *)toJSONData:(id)theData
{
    
    NSData *data = [NSJSONSerialization dataWithJSONObject:theData
                                                   options:NSJSONReadingMutableLeaves | NSJSONReadingAllowFragments|NSJSONWritingPrettyPrinted
                                                     error:nil];
    if (data == nil) {
        return nil;
    }
    NSString *string = [[NSString alloc] initWithData:data
                                             encoding:NSUTF8StringEncoding];
    return string;
}

你可能感兴趣的:(iOS开发关于使用AFN遇到的问题总结)