AFNetworking 2.0을 사용하여 네트워크 요청을 수행하려고하는데 이상한 행동을합니다. AFHTTPSessionManager
을 suggested in the documentation으로 서브 클래스 화했으며, 기본 URL 세트가 있고 내 auth 헤더를 설정하는 싱글 톤 객체를 반환하는 클래스 메소드를 제공했습니다.AFHTTPSessionManager를 싱글 톤으로 사용하는 올바른 방법은 무엇입니까?
+ (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
줄의 주석을 제거 할 때마다 공유 인스턴스에 대한 참조를 얻을 때마다 응답 serializer의 새 인스턴스를 만들면 더 이상이 오류가 발생하지 않습니다.
respondSerializer를 여러 번 안전하게 사용할 수 있습니까? 그것은 일종의 국가가 요청을 가로 질러 매달려있는 것처럼 느낍니다. 이것을 설정하는 올바른 방법은 무엇입니까?
'responseSerializer '는 안전하게 여러 번 사용할 수 있습니다. POST (인증) 코드의 어디에서나'responseSerializer'를 변경하고 있습니까? –
'self.serializer' 란 무엇입니까? 나는 AFHTTPSessionManager 또는 AFURLSessionManager 인터페이스에서이를 보지 못했습니다. –
원래는 responseSerializer를 설정하지 않았습니다. 한 번 initWithBaseUrl 메서드에서 설정했지만 동일한 문제가있었습니다. 공유 인스턴스를 요청할 때마다 설정하는 경우에만 오류가 사라집니다. – ideaencoder