gpt4 book ai didi

afnetworking-2 - 将 AFHTTPSessionManager 用作单例的正确方法?

转载 作者:行者123 更新时间:2023-12-04 02:17:20 26 4
gpt4 key购买 nike

我正在尝试使用 AFNetworking 2.0 来执行我的网络请求,但我遇到了一些奇怪的行为。我已经子类化 AFHTTPSessionManagersuggested in the documentation并提供了一个类方法,该方法返回一个单例对象,该对象设置了基本 url 并设置了我的 auth header 。

+ (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];
}

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

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

最佳答案

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

关于afnetworking-2 - 将 AFHTTPSessionManager 用作单例的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19635043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com