美文网首页iOS开发
iOS开发关于使用AFN遇到的问题总结

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

作者: MM面包 | 来源:发表于2018-07-16 16:38 被阅读247次

    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遇到的问题总结

        本文链接:https://www.haomeiwen.com/subject/snhxsftx.html