使用AFHTTPSessionManager作为单例的正确方法?

ide*_*der 11 afnetworking-2

我正在尝试使用AFNetworking 2.0来执行我的网络请求,但我遇到了一些奇怪的行为.我按照文档中的建议进行了子类化AFHTTPSessionManager,并提供了一个类方法,该方法返回一个单例对象,该对象具有基本URL设置以及设置我的auth标头.

+ (id)sharedInstance {
  static dispatch_once_t once;
  static MyHTTPClient *sharedInstance;

  dispatch_once(&once, ^{
    sharedInstance = [[self alloc] initWithBaseURL: NSURLURLWithString:kPlatformAPIBaseURL]];
  });

  //Uncommenting this line makes the error go away
  //sharedInstance.responseSerializer = [AFJSONResponseSerializer serializer];

  //get latest session id everytime someone gets an instance of the client
  sharedInstance.sessionId = [MySessionManager getSessionId];

  return sharedInstance;
}

- (instancetype)initWithBaseURL:(NSURL *)url {
  self = [super initWithBaseURL:url];

  if(self) {
    self.sessionId = [FSSessionManager getSessionId];

    self.serializer = [AFHTTPRequestSerializer serializer];
    [_serializer setValue:_sessionId forHTTPHeaderField:kAuthorizationHeader];
    [_serializer setValue:@"application/json" forHTTPHeaderField:kAcceptHeader];

    self.requestSerializer = _serializer;
  }

  return self;
}

- (void)setSessionId:(NSString *)sessionId {
  _sessionId = sessionId;
  [self.serializer setValue:_sessionId forHTTPHeaderField:kAuthorizationHeader];
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序使用它来发出POST请求来验证我的用户.这很好用.然后我发出GET请求来检索对象列表.也很棒.然后,我发出相同的GET请求,然后我收回网络错误.Error Domain=AFNetworkingErrorDomain Code=-1016 "Request failed: unacceptable content-type: application/json" 这是完全相同的GET请求,但在第二次调用时失败.当我取消注释该sharedInstance.responseSerializer行时,每次我获得对共享实例的引用时,我都会创建一个响应序列化程序的新实例,然后我就不会再出现此错误了.

responseSerializer可以安全地多次使用吗?感觉就像某种状态在请求中徘徊.设置它的正确方法是什么?

Aar*_*ger 7

响应序列化器可以安全地多次使用.根据您发布的错误消息"不可接受的内容类型:application/json",您似乎在设置responseSerializer代码中的其他位置.只要设置为JSON,JSON就会正确序列化[AFJSONResponseSerializer serializer].