2014-11-06 1 views
0

모든 HTTP 요청을 수행하는 토큰을 요청하는 앱을 개발했습니다. 내가처럼 그들을 전화 드렸습니다 NVEngine라는 클래스의 모든 100 개 가지 요청 처리 해요 :세션이있는 iOS HTTPRequest 처리

- (void) sendRequest:(NSURLRequest *)theRequest withRequestType:(NVRequestType)requestType {  
    NVURLConnection *conn = [[NVURLConnection alloc] initWithRequest:theRequest 
                 delegate:self 
                requestType:requestType]; 

    if (!conn) {  
    NVLog(@"+++++++++++++++++++++++ UNABLE TO CREATE CONNECTION");  
    } 
} 

문제를이 요청의 결과가 "세션이 만료"가,이 경우 수 있다는 것입니다 토큰을 새로 고친 다음 사용자 상호 작용없이 동일한 이전 요청을 다시 호출하기 위해 재 인증 HTTP 요청을 수행해야합니다. 내 sendRequest 방법으로 콜백을 관리하려면 어떻게해야합니까? - (void) parseResultForConnection:(NVURLConnection *)connection 하나? sendRequest으로 돌아갈 수 있다면, 먼저 새 토큰을 검색하기 위해 동기 요청을 수행 한 다음 이전 HTTPCall을 다시 시도 할 수 있습니다.

추신 : 나는 이미 Session expire design pattern 과 같은 주제에 대한 답변을 보았지만 정확히 무엇이 필요한지 찾지 못했습니다.

+0

NSURLConnectionDelegate 및/또는 NSURLConnectionDataDelegate를 구현하려고 했습니까? – Daniel

+0

parseResultForConnection은 이미 델리게이트의 구현이며, 나는 당신이 질문하는 것을 이해하지 못한다. 더 자세하게 얘기해 주 시겠어요? :) – fustalol

+0

좋아, 당신도 구글이 인식하지 못하는 커스텀 클래스를 사용하고있다. 그래서 아무도 그것을 사용하는 방법에 당신을 도울 수 없을 것입니다. 그러나 보통, 당신은'connectionDidFinishLoading :'에서 수신 된 데이터를 파싱하고,'session expired'를 받았다면 새로운 토큰을 얻고 이전 연결을 다시 시도하라는 새로운 요청을 보냅니다. 'NSURLConnection'을 사용할 때 (즉, – Daniel

답변

1

이처럼 할 수있는 : 당신은 요청을 보내는

  1. , 내가 비동기 랬하고 있습니다.
  2. 요청 중 하나는 session expired입니다.
  3. 정적 변수를 설정합니다 (예 : static BOOL isRetrievingNewToken). YES. 새 토큰이 수신 된 후에 호출 할 블록이있는 정적 대기열을 작성한 경우 session expired을 수신 한 요청 호출로 초기화합니다. isRetrievingNewToken==YES 동안 새 요청이 수신되면 대기열에 넣습니다. 다른 요청이 session expired을 받으면 대기열에 넣습니다.
  4. 새 토큰을 받으면 큐의 모든 블록을 실행하고 항목을 제거한 다음 isRetrievingNewTokenNO으로 설정합니다.

모양에 따라 연결 클래스 NVURLConnection에서이 동작을 구현하는 것이 좋습니다.

+0

문제는 'NSURLConnection initWithRequest : delegate :'로 요청을하면 어떻게 원래 요청을 다시 검색 할 수 있습니까? 다시 시도 토큰 요청 후입니까? – fustalol

+0

'NSURLConnection'을 사용한다면'connection.currentRequest'를 호출하여 원래 요청을 검색 할 수 있습니다. 여기서'connection'은 NSURLConnection * 객체입니다 (대부분의 델리게이트 메소드에서 전송됩니다) – Daniel