2012-08-01 3 views
0

사용자를 내 애플리케이션에 로깅 할 때 사용자 이름만을 사용하여 서버에서 사용자 객체를 가져와야합니다. 이것은 다른 API 호출을 만들기 위해 필요한 userId (다른 것들 중에서)를 반환합니다. 이 시점부터 userId를 사용하여 몇 가지 다른 HTTP 호출을 할 것입니다. 어떻게하면 다른 호출을 보내기 전에 사용자 객체를 완전히 끌어 내려는 동기식 호출을 수행 할 수 있습니까?RestKit을 사용하여 동기식 HTTP 호출하기

내가 완벽하게 작동 내 응용 프로그램 위임 클래스에서 설정 내 객체 매핑을했습니다, 서버에서 아래로 사용자 개체를 끌어이 코드를 사용하고는 :

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:[@"/api/users/" stringByAppendingString:[_userNameField text]] delegate:self]; 

이것은 내가 무엇을 시도했다입니다 ... 여기 제안 :

RKObjectLoader* loader = [[RKObjectManager sharedManager] objectLoaderForObject:currentUser method:RKRequestMethodPUT delegate:nil]; 
RKResponse* response = [loader sendSynchronously]; 

Making synchronous calls with RestKit 그러나이 코드는 (1) 사용되지 않는 방법 objectLoaderForObject (2) 'Unable to find a routable path for object of type '(null)' for HTTP Method 'POST'' 말을 충돌 사용합니다.

+1

이것은 좋은 디자인이 아닙니다. 웹 서버에 동기 호출을해서는 안됩니다. 먼저 해당 정보가 필요한 경우 정보가 없거나 (예를 들어 인터넷에 연결되어 있지 않은 경우) 정보가 도착한 경우 (대리인 또는 옵저버 등) –

답변

4

이것이 iPhone 응용 프로그램을위한 이상적인 디자인인지 여부와는 별도로, 나는 블록을 사용하여 원하는 것을 성취 할 수있었습니다.

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:[@"/api/users/" stringByAppendingString:[_userNameField text]] usingBlock:^(RKObjectLoader* loader) { 

    loader.onDidLoadResponse = ^(RKResponse *response) { 

     NSLog(@"Response: \n%@", [response bodyAsString]); 
    }; 

    loader.onDidLoadObjects = ^(NSArray *objects) { 

     APIUser *apiUser = [objects objectAtIndex:0]; 
     NSLog(@"user_id is %i", apiUser.user_id); 


    }; 

    loader.onDidFailWithError = ^(NSError *error) { 


      UIAlertView *badLoginAlert = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"LOGIN_FAILED", nil) 
                    message:NSLocalizedString(@"BAD PASSWORD OR USERNAME", nil) 
                    delegate:self 
                 cancelButtonTitle:NSLocalizedString(@"OK", nil) 
                 otherButtonTitles:nil]; 
      [badLoginAlert show];   
    }; 
}]; 

희망이 있으면 도움이 될 것입니다.

+0

블록이있는 예제에서는 +1, 디자인 문제 = +1 –

+0

제가 지적했듯이, 이것은 이상적인 접근법이 아닙니다. 백엔드 API를 변경할 수없는 경우에는 도움이 될 수 있습니다. –

+0

일반 응용 프로그램에는 좋지 않지만 동기식 호출은 테스트 단위를 프로그래밍하기가 훨씬 쉽다는 것에 동의합니다. – axello

관련 문제