2013-10-29 86 views
0

我想分析在其他線程的一些數據(沒有主線程)如何知道其他線程中的任務何時完成?

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]; 
} 

finshied解析後在其他線程中的所有數據,我想回到回主線程。怎麼做 ?

+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

相關問題