2014-06-16 2 views
0

편리한 메소드에 기반 API :포장 블록 I (이뿐만 아니라 NSURLSession에 적용되는 것이지만) 웹 API에 액세스 할 AFNetworking 2.0을 사용하고, 현재 내가 다음과 같습니다 코드의 무리가

[self.rottenTomatoesManager GET:@"movies.json" parameters:@{@"q" : searchString, @"apikey" : [self.rottenTomatoesManager apiKey]} 
           success:^(NSURLSessionDataTask *task, id responseObject) { 
            NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response; 
            if(response.statusCode == 200){ 
             NSDictionary *responseData = responseObject; 
             self.searchResults = responseData[@"movies"]; 
             [self.searchDisplayController.searchResultsTableView reloadData]; 
             [self.tableView reloadData]; 
            } 
     } 
           failure:^(NSURLSessionDataTask *task, NSError *error) { 
            NSLog(@"Error loading movies %@", error.localizedDescription); 
     }]; 

는 그 기능을하고의 ViewController 코드를 정리하고 불가지론 코드 프레임 워크의 대부분을 만들기 위해이

NSArray *results = [self.rottenTomatoesManager searchMoviesWithTitle:@"The avengers"] 

과 같은 형태 편리한 방법을 포장하고 싶습니다.

동기식 API로 비동기식 블록 기반 API를 사용하지 않기 위해 가장 좋은 방법은 무엇입니까?

+0

콜백 블록! – CrimsonChris

+0

asyn API를 동기화 API로 변경하고 싶지 않습니다. 블로킹이 좋지 않기 때문에 (블럭이 좋다) –

답변

0

콜백 블록이 좋습니다.

[self loadSomethingWithCallback:^(NSArray *results) { 
    NSLog(@"%@", results); 
}]; 
+0

나는 AFNetworking 성공 블럭 안에서 블럭을 실행한다고 가정한다. – bringel

+0

정답이며 빈 배열 또는 아마도 nil이있는 실패 블록에서도 실행하고 싶을 것입니다. – CrimsonChris

+0

이제 리턴 유형이없는 블록이어야한다고 생각합니다. 해당 블록에서 tableview를 업데이트하고 AFNetworking 블록에서 해당 블록을 호출하십시오. – bringel