2014-12-08 2 views
0

XML 데이터를 구문 분석 할 때 활동 표시기를 구현하려고합니다.백그라운드에서 구문 분석 한 후 데이터가 UITableView에로드되지 않습니다.

이 부분은 Activity indicator (spinner) with UIActivityIndicatorView이며 작동하고 있습니다. 그러나, 내가 데이터를 전혀 구문 분석을 마친 때 performSelectorInBackground 사용하고 있기 때문에 내 tableview에 표시됩니다.

[self.tableview reloadData]를 시도했지만 [self.view setNeedsDisplay]를 시도했지만 아무것도 작동하지 않습니다.

보기를 종료하고 돌아 오는 경우 모든 데이터가 테이블 뷰 셀에 나타납니다.

아이디어가 있으십니까?

+0

무엇을 시도 했습니까? 테이블 뷰에 데이터를 어떻게 추가하고 있습니까? 관련 코드를 모두 표시 할 수 있습니까? – KerrM

+0

당신은'performSelectorOnMainThread'을보아야합니다. – sage444

+0

@KerrM RSS 피드를 파싱하고 검색하는 모든 일은 내 View Controller로 가져 오는 파일에서 발생합니다. 내보기 컨트롤러에서 , 나는 이렇게'self.rssNews = [[ParseRSSNews의 ALLOC] initWithUrl : self.url] : '[자기 performSelectorInBackground : 파서 ​​파일에 initWithUrl 방법에 , 내가 이런 짓을'@ 선택기를 (parseXMLFileAtURL : withObject : 홈페이지]' 가 분석 완료되면, 나는하지 않았다 : 는'[자기 performSelectorOnMainThread : @selector (doneParsing) withObject : 무기 호 waitUntilDone : NO];' 나는 인쇄 할 때 얼마나 많은 항목입니다 내 self.rssNews (보기 컨트롤러에서), 그것은 0을 보여줍니다. 그래서, 그것은 데이터를 반환하지 않습니다. –

답변

1

당신의

[self.tableview reloadData] 

를 호출해야 주요스레드

은 당신이 할 수있는 (당신은 [NSThread isMainThread]와에 느릅 나무 스레드 you'r에서 확인하실 수 있습니다)

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
//create background queue 
dispatch_queue_t backgroundQueue = dispatch_queue_create("com.mycompany.myqueue", 0); 
//dispatch in background 
dispatch_async(backgroundQueue, ^{ 
     //execute long operation in background thread 
     self.rssNews = [[ParseRSSNews alloc] initWithUrl:self.url]; 
    //dispatch in main thread after long operation is finish 
    dispatch_async(dispatch_get_main_queue(), ^{ [self.tableView reloadData]; }); 
}); 
+0

RSS 피드를 구문 분석하고 검색하는 것이 별도의 파일에서 발생하기 때문에 self.tableview에 액세스 할 수 없습니다. 내보기 컨트롤러에서이 작업을 수행 할 수있었습니다 : '[UIApplication sharedApplication] .networkActivityIndicatorVisible = YES; dispatch_async (dispatch_get_main_queue()^{ 는 =에게 [ParseRSSNews의 ALLOC]는 initWithUrl는 : self.url] self.rssNews; [self.tableView는 reloadData] 는})' 그러나 네트워크 표시하지 않는다 파싱하는 동안. –

+1

내 대답을 업데이트했습니다 –

+0

Boris Thank you! 이것은 많은 도움! 또한 두 번째 dispatch_async() 내에서 networkActivityIndicatorVisible을 해제하도록 추가했습니다. 다시 귀하의 모든 도움을 감사하십시오 !!! =) –

관련 문제