2014-10-19 3 views
2

AFURLSessionManager를 사용하여 백그라운드 작업을 구현하는 데 문제가 있습니다. NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:을 사용하고 편리한 메소드를 사용하여 POST 요청을 작성하여 BaseURL 및 SessionConfiguration을 사용하여 새 AFHTTPSessionManager를 만듭니다.백그라운드 작업에서 AFNetworking 2.0 사용

내 앱을 실행하면 첫 번째 요청은 정상적으로 전송되지만 두 번째 요청은 A background URLSession with identifier {ID} already exists!을 반환하며 앱이 다운됩니다.

나는 애플의 WWDC 2013 비디오를 본 적이 그들은 당신이 그러나 AFURLSessionManager에 대한 session 속성과 같은 읽기 전용이 설정되어

dispatch_once(&onceToken, ^{ 
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.yourcompany.appId.BackgroundSession"]; 
    session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil]; 
}); 

를 사용하여 한 번만 세션 구성을 작성하는 것이 좋습니다 및 방법은 나를 위해 존재하지

self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue]; 

내가 뭔가를 잘못하고 있어요 같은 느낌,하지만 어떻게 다른 내가 백그라운드 작업을 지원할 수 있습니다 사용자 정의 NSURLSession 만 NSURLSessionConfiguration, 그이 AFURLSessionManager:init 내부에 생성을 전달하는 AFNetworking 사용 하시겠습니까?

답변

2

AFHTTPSessionManager을 인스턴스화 한 다음 session을 일부 싱글 톤 NSURLSession을 참조하도록 변경할 수는 없습니다. 따라서 대신 앱 전체에서 다시 사용할 수있는 공유 인스턴스 인 AFHTTPSessionManager 개체 자체를 만들어야합니다.

end of this answer에서 백그라운드 세션에 AFNetworking을 사용하는 예를 제공합니다.

+0

언제든지 invalidateAndCancel을 호출해야합니까? –

+0

나는 할 수있을 것이라고 생각하지만, 필연적 인 필요가 없다면 걱정하지 않을 것이다. 내게 조숙 한 최적화 같은 느낌 ... – Rob

+0

늦은 코멘트 : 내 앱은 공유 된 'AFHTTPSessionManager' 객체를 사용하여 정기적으로 다운로드 (사용자 프롬프트)를하고 배경 업데이트를 추가하고 싶습니다. 이것을 위해 또 다른'AFHTTPSessionManager'를 생성해야합니까? 아니면 'NSURLSessionConfiguration'을 즉시 변경할 수 있습니까? – Koen