2017-11-06 11 views
0

사용자 지정 NSURLProtocols 주변의 Ray Wenderlich에서 this tutorial을 실행했습니다. 나는 특정 NSURLRequests ('요청 a')를 가로 채고 다른 요청 ('요청 b')을 발사하는 시나리오를 가지고 있습니다. 이 두 번째 요청 (b)이 실패하는 시나리오의 경우 원래 요청 (a)을 취소 할 수 있기를 원하지만, 일정 기간이 지나면 시간 초과가되지만 시간을 좀 더 제어하고 즉시 실패합니다 그것.NSURLRequest와 연결된 NSURLConnection 가져 오기

사용자 지정 NSURLProtocol 내에서 차단 된 NSURLRequest (요청 a)를 사용하여 요청 b에 대한 새 NSURLConnection을 만들고 있지만 해당 요청을 시작한 원래 NSURLConnection에 대한 참조를 가져올 수 있는지 알 수 있습니까? 그러면 이후 요청 b 호출이 실패하면 취소 할 수 있습니까?

편집 : 내 예 self.connection '는 요청 B'와 관련된 것이기 때문에

가있는 NSURLConnection 위임 방법의

아무도 나에게 원래있는 NSURLConnection 개체에 대한 액세스 권한을 부여 할 것,하지 원래 요청

참조 아래의 예를 위임 방법 :

- (void)startLoading { 
    self.connection = [NSURLConnection connectionWithRequest:self.request 
delegate:self]; 
} 

- (void)stopLoading { 
    [self.connection cancel]; 
    self.connection = nil; 
} 
+0

구현에 관련 코드 스 니펫을 추가 할 수 있습니까? –

+1

*이 자습서 *는 거의 4 살이며 API가 구형입니다. – vadian

+0

NSURLConnection을 사용할 수 없다는 뜻입니까? 나는 NSURLSession이 선호하는 접근법이라는 것을 알고 있지만 튜토리얼을 따르고 있었다. NSURLSession을 사용하는 개정판이 있는지 확실하지 않다. –

답변

0

IIRC, 당신은 당신의에 어떤 개체에 NSURLProtocolClient 프로토콜의 호출 방법으로 원래 연결 또는 세션과 통신3210 하위 클래스의 client 속성 개체 자체는 요청이 시작된 방법에 따라 NSURLConnection 또는 NSURLSession 기계의 일부일 수 있지만 어느 방법이든 동일한 메서드를 호출합니다.

예를 들어, 당신은 아마이 하나를 호출 할 :

- (void)URLProtocol:(NSURLProtocol *)protocol 
    didFailWithError:(NSError *)error; 

참조 애플의 NSURLProtocolClient Protocol Reference 자세한 내용은.

+0

감사합니다. 스레딩 문제가있는 것으로 나타났습니다. 내 전화가 원래 요청이 시작된 것과 다른 스레드에서 처리되는 것으로 판명되었습니다. 따라서 내 전화가 실패하고이 위임 메서드로 이동했지만 원래 요청이 시간 초과되어 즉시 실패하지 않았 더라면 발견해야했습니다. 이것은 곧 Xcode의 Thread 디버거 뷰에서 바로 다음에 알 수 있습니다! :) 감사! –