2012-03-25 4 views
0

NSIncrementalStore 안에 NSURLConnection을 사용하여 NSManagedObject을 레일스 기반의 나머지 기반 웹 서비스와 동기화합니다. 내가 +sendSynchronousRequest:returningResponse:error 알고 있지만 내 이해는 내가 제대로 반응을 처리하는 데 필요한 것입니다 HTTP 응답 상태 코드와 같은 것들에 액세스 할 수 있도록 허용되지 않습니다, 내 이해는 sendSynchronousRequest는 200 범위에서 응답하고 실패하면 데이터를 반환합니다 그렇지 않으면 정말로 그 이상을주지 않습니다. 어떤 식 으로든 NSURLConnection이 인스턴스화되고 차단 해제 된 후 NSURLConnection의 대리자가 차단 된 메서드에 의해 반환 될 수있는 값을 설정 한 후 현재 메서드 호출을 차단해야한다고 가정합니다. 나는 이것이 NSLock과 NSThread의 조합을 포함 할 것이라고 추측하고 있지만, 이것으로 어디에서 시작해야할지 모르겠다. 어떤 도움도 크게 감사 할 것이다. 고마워.NSURLConnection의 동기 버전을 어떻게 만듭니 까?

+0

또한 NSURLConnectionDelegate 설명서는 온라인으로 볼 수 있습니까? 헤더 파일 외부에 존재하지 않습니다. 온라인 문서는 단지 인증에 관한 것으로 보이며'connection : didReceiveResponse :'와 같은 것이 없습니다. – quinn

답변

4

returningResponse: 매개 변수에서 가져온 응답 개체를 NSHTTPURLResponse으로 캐스팅하면 상태 코드와 기타 HTTP 관련 응답 값에 액세스 할 수 있습니다.

NSURLResponse* response = nil; 
NSError* error = nil; 
NSData* data = [NSURLConnection sendSynchronousRequest:request 
            returningResponse:&response 
               error:&error]; 
NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response; 
if ([httpResponse statusCode] == 200) { 
    // ... 
} 
+0

고마워요,이게 저를 거의 모든 곳으로 데려다 줄 것 같습니다. 422에서는 제대로 작동하는 것처럼 보이지만 401이 나올 때 서버가 401으로 응답 할 때 위의 예제에서 httpResponse 변수가 0이 아니라고 가정합니다. 이것에 관해서는 어떤 것이 행해질 수 있습니까, 아니면 제가 해결해야 할 제한 사항입니까? – quinn

+0

일반적으로 너 같은 것을 처리하도록 설계된 NSURLConnection보다 낮은 수준의 API를 원한다고 들린다. –

2
NSError* err; 
NSHTTPURLResponse* response; 
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; 

귀하의 HTTP 응답 당신은에 액세스 할 수 있도록 간접으로 반환됩니다. NSHTTPURLResponse를 전달하거나 그대로 캐스트하십시오. 내가 어떻게 든있는 NSURLConnection이> 인스턴스화 된 후 현재 메서드 호출을 차단하고있는 NSURLConnection의 위임 후 차단을 해제해야합니다 있으리라 믿고있어

>은 차단 방법에 의해 반환 될 수있는 몇 가지 값을 설정합니다. 나는 이것이 NSLock과 NSThread의 어떤 조합을 포함 할 것이라고 가정하고있다.

나는 이것이 무엇을 의미하는지 모른다. 동기 요청을 실행 중이므로 대리인이 필요하지 않습니다. 스레딩은 동 기적으로 이러한 요청을 실행하기 때문에 GCD를 사용하여 백그라운드 스레드에서 만들거나 더 간단하게 만들 수 있습니다. 나는 NSOperationNSOperationQueue을 살펴볼 것입니다.

+0

조언을 주셔서 감사합니다. NSIncrementalStore에 대한 이해가 정확하다면 응용 프로그램 내에서 Core Data로 작업 할 때마다 NSIncremental 저장소 외부에서 GCD를 사용해야합니다. 그게 말이 되길 바래 =/obj-c로 작업 한 것은 이번이 처음입니다. – quinn

관련 문제