2012-03-06 3 views
0

내 작은 문제에 대한 좋은 해결책이 필요합니다.아이폰의 목표 c 비동기 HTTPS 요청 NSThread에서

현재 내가 가지고있는 것 : 내 응용 프로그램은 asyncron https 요청과 잘 작동합니다. 현재 응용 프로그램은 JSON 객체를 업로드합니다. 지금까지는 그렇게 좋았습니다. 그 후 sqlite 데이터베이스에 개체를 저장합니다.

이제 수신 된 서버 응답 코드가 무엇인지 판단해야합니다. 업로드 된 데이터가 유효하면 000과 같은 응답 코드가 표시되고 그렇지 않은 경우 151과 같은 코드가 표시됩니다. 이를 위해 데이터베이스 응답 코드를 저장하기 위해 서버 응답을 기다려야합니다.

나는 NSThread도 실험했다. 그러나 그것은 내가 예상했던 것만 큼 효과가 없었습니다.

누군가 제안 사항이 있으십니까? 내 말은, 그것은 가장 일반적인 것들 중 하나가되어야한다;) 나는 그것을 보지 못한다.

들으, 난 보통 내 통신을 관리하는 NSOperationQueue를 사용

+1

당신이 투표를했다면, 적어도 새로운 사용자에게 힌트를주십시오. –

+0

@ NickWeaver, 좋을 것이다;) –

+0

질문에 당신을 돕기 위해 : 나는 주요 문제가 무엇인지 모르겠다. 어떤 서버 응답이 실제로 어떤 요청에 속했는지 파악하는 데 어려움이 있습니까? –

답변

0

를 도미니크. 이를 통해 비동기식 대신 동기식 요청을 사용할 수 있으며 한 가지 방법으로 전체 셰인을 처리 할 수 ​​있습니다.

예 :

-(void)doIt { 
    NSInvocationOperation *op = [[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doIt_) object:nil] autorelease]; 
    [opQueue addOperation:op]; 
} 

-(void)doIt_ { 
    NSData *data; 
    NSMutableURLRequest *request; 
    NSURLResponse *response = nil; 
    NSError *error = nil; 

    // Build request to spec 

    data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:error]; 

    // do something with data 

    [self performSelectorOnMainThread:@selector(yadda) withObject:yaddayadda waitUntilDone:NO]; 
} 

당신이 비동기 로딩 방법을 사용한다면, 당신이 내려 오는대로 응답 데이터를 잡으려고 대리자를 구현하고 완료되면 그것으로 뭔가를해야합니다.

+0

맞지만 비동기 요청을 사용해야하므로 SSL 연결이 필요합니다. Syncron 메서드는 HTTPS를 지원하지 않습니다. NSOperationQueue에 대해 살펴 보겠습니다. THX –

0

CFNetwork API의 래퍼 인 ASIHTTPRequest을 살펴 보는 것이 좋습니다. 특히 비동기 HTTP 요청에서 제공하는 메커니즘을 살펴보십시오. 요청이 완료되거나 실패하면 블록을 정의하여 응답 데이터를 쉽게 검사 할 수 있습니다. 귀하의 코드는 다음과 같을 것입니다 :

+0

일반적으로 ios5/ARC에서 지원하지 않는 ASIHTTP Framework를 사용합니다. –