2013-03-14 4 views
1

iOS 개발에 다소 익숙하며 스레딩 문제가 있습니다. json 데이터를 반환하는 웹 서비스를 호출하고이 작업을 수행하는 코드가 예상대로 작동합니다. 테스트를 위해 버튼을 클릭하고 데이터를 검색 한 다음 형식이 지정된 결과로 텍스트 뷰 컨트롤을 채울 수 있어야합니다.iOS 앱의 스레딩 문제

dispatch_queue_t que = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
dispatch_async(que, ^{ 
    thisRiverGauge = [[RiverGauge alloc] initWithStationInfo:gauge forHistoryInHours:5 inThisFormat:@"json"]; 
    [txtResults setText:rval]; 
}); 

스레드 내에서 텍스트 뷰 (txtResults)를 업데이트하려고, 나는 런타임 오류가 발생합니다 : 여기에 버튼 클릭 이벤트 처리기에서 발췌 내 코드입니다. 업데이트를 스레드 외부의 textview에 배치하면 스레드가 이벤트 처리기의 실행보다 완료하는 데 시간이 오래 걸리기 때문에 분명히 업데이트되지 않습니다. 이것에 대한 해결책은 무엇일까요?

Thx!

+0

http://stackoverflow.com/questions/13969820/iphone-application-my-application-crash/13970179#13970179 – Rajneesh071

답변

4

주 스레드에서 GUI 관련 작업을 수행하고 textview 값을 업데이트 할 코드 주위에 주 대기열/스레드 블록을 추가해야합니다.

ispatch_queue_t que = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
dispatch_async(que, ^{ 
    thisRiverGauge = [[RiverGauge alloc] initWithStationInfo:gauge forHistoryInHours:5 inThisFormat:@"json"]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
    [txtResults setText:rval]; 
    }); 
});