2012-07-17 6 views
0

Restkit with Blocks를 사용하여 응답을 기다리고 있습니다.iOS RestKit Blocks

예 :

내 블록 요청
NSArray *myArray = ["RESULT OF REST-REQUEST"]; 

// Working with the array here. 

하나 :

당신은 비동기 될 이미지지고 있기 때문에이 방법에 아무것도 반환하지 수
- (UIImage*)getPhotoWithID:(NSString*)photoID style:(NSString*)style authToken:(NSString*)authToken { 
__block UIImage *image; 
NSDictionary *parameter = [NSDictionary dictionaryWithKeysAndObjects:@"auth_token", authToken, nil]; 
RKURL *url = [RKURL URLWithBaseURLString:@"urlBase" resourcePath:@"resourcePath" queryParameters:parameter]; 
NSLog(@"%@", [url absoluteString]); 
[[RKClient sharedClient] get:[url absoluteString] usingBlock:^(RKRequest *request) { 
    request.onDidLoadResponse = ^(RKResponse *response) { 
     NSLog(@"Response: %@", [response bodyAsString]); 
     image = [UIImage imageWithData:[response body]]; 
    }; 
}]; 
return image; 
} 
+2

무엇이 당신의 질문입니까? – Till

+0

응답이 도착하기 전에 메서드가 끝나기 때문에 Array가 null이됩니다 ... 어떻게 응답을 기다릴 수 있습니까? 나는 그것이 블록으로 작동 할 것이라고 생각했다. – Maik639

답변

2

- 그것은 -(void)을해야합니다 .

그럼, 어떻게 하시겠습니까? 이 메소드를 호출하는 액션을 응답 블록에 넣어야합니다. 블록에 retain cycles을 경계하십시오.

__block MyObject *selfRef = self; 

[[RKClient sharedClient] get:[url absoluteString] usingBlock:^(RKRequest *request) { 
    request.onDidLoadResponse = ^(RKResponse *response) { 

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

     image = [UIImage imageWithData:[response body]]; 

     [selfRef doSomethingWithImage:image]; 

    }; 
}]; 
+0

고마워! 그것은 좋은 해결책입니다! – Maik639

0

위의 코드는 ARC를 사용 설정 한 경우 작동하지 않습니다 (iOS 5.0 이후의 XCode 기본값). __block 변수는 더 이상 ARC에서 자동 보유가 면제되지 않습니다. iOS 5.0 이상에서 __block 대신 __weak을 사용하여 보관주기를 해제하십시오.