2013-10-29 3 views
0

나는 다른 스레드의 모든 데이터는, 내가 메인 스레드를 다시 반환 할 finshied 구문 분석 후 다른 스레드에서 일부 데이터 (안 메인 스레드)다른 스레드의 작업이 완료된 시점을 파악하는 방법?

for (NSString* theKey in [rssSourcesData allKeys]) 
{ 
     NSURL *url = [NSURL URLWithString:theKey]; 
     NSURLRequest *initialRequest = [NSURLRequest requestWithURL:url]; 
    AFGDataXMLRequestOperation *oper = [AFGDataXMLRequestOperation 
XMLDocumentRequestOperationWithRequest:initialRequest 
success:^(NSURLRequest *request, NSHTTPURLResponse *response, GDataXMLDocument *XMLDocument) { 
      [self parseDataInBackground:XMLDocument forKey:theKey]; 

     } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, GDataXMLDocument *XMLDocument) { 

      NSLog(@"failure handler: %@",theKey); 

     }]; 

     [oper start]; 
} 

을 구문 분석합니다. 그렇게하는 방법 ?

+0

코드에서 블록을 사용하여 앱을 주 스레드로 강제로 되돌릴 수 있습니다. 또는 parseDataInBackground가 완료되면 리스너를 추가하고 NSNotification을 게시하여 리스너가 이후에 코드를 실행할 수 있도록 할 수 있습니다. 이 링크는 이해하는데 도움이 될 수 있습니다 : http://stackoverflow.com/questions/10492138/ios-what-is-the-equivalent-of-an-event-listener-in-objective-c – faterpig

답변

0
[self performSelectorOnMainThread:@selector(parseFinished:) withObject:dataObject waitUntilDone:[NSThread isMainThread]]; 

당신은 구문 분석과 끝되면 데이터는 메인 쓰레드로 돌아가서 데이터를 알리려면이 방법을 사용합니다.

1
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    // do your work here 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     // on the main thread 
    }) ; 
}) ; 

GCD는 더 효과적입니다.

+0

나는 그것을했지만 작동하지 않습니다. . – DungLe

+0

그것이 작동하지 않는다는 것은 무엇을 의미합니까? – KudoCC

+0

작업이 끝나기 전에 메인 스레드로 돌아갑니다! – DungLe

관련 문제