2012-06-20 6 views
0

사용자가 관리 웹 사이트에서 제품 데이터를 다운로드 할 수있게 해주는 간단한 카탈로그 앱이 있습니다.UITextView 업데이트 차단

다음 코드는 사용자가 다운로드를

- (IBAction)downloadProducts:(id)sender { 
    outputText.text = @"Downloading data, please wait..."; 
    [Product loadData:outputText]; 
    outputText.text = @"Ok, download complete."; 
} 

이 outputText 시작 버튼을 누를 때 트리거는 사용자가 무슨 일이 일어나고 있는지 알 수 있도록되어있는 UITextView이다.

다운로드를 처리하는 Product 클래스에 정적 메서드가 있습니다. 이 모든 것이 정상적으로 작동합니다. 유일한 문제는 다운로드가 완료 될 때까지 uitextview에 대한 출력이 차단된다는 것입니다.

즉. Please wait ... "메시지가 [Product loadData : outputText] 이후에 표시 될 때까지 표시되지 않습니다. 완료 즉시

많은 감사 어떤 도움,

감사

답변

2

예, UI를 업데이트하는 것은 사용자의 다운로드 요청시 차단됩니다

... 다운로드 완료 메시지와 함께 덮어 쓰기됩니다. 당신은 호출하기 전에 기다려야 할 수도 있습니다 [제품 loadData :이 outputText,

[self performSelector:@selector(someMethod:) withObject:nil afterDelay:1.0]; 

를 사용하여 수행 및 그 방법에

[Product loadData:outputText]; 
outputText.text = @"Ok, download complete."; 

을 넣을 수있다.

또는 모범 사례의 경우 다른 스레드 또는 블록을 사용하여 다운로드를 시작하십시오. 이렇게하면 다운로드 중에 UI를 계속 업데이트 할 수 있습니다. UI 업데이트는 주 스레드/대기열에서만 수행해야합니다.

+0

간단한 '최선의 방법이 아닌'방법을 사용해 주셔서 감사합니다. 건배 jx – jx12345

1

사용자 작업에 대한 응답으로로드하기 때문에이 메서드는 아마도 호출되고있는 것입니다. main thread. 화면 새로 고침은 주 스레드에서만 발생할 수 있습니다. 따라서 주 스레드가 데이터를로드하는 중일 때 텍스트보기를 그릴 수 없습니다.

이 문제를 해결하는 방법 중 하나는 배경 스레드를 시작하여로드하는 것입니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 다음 주 코드로 넘어 가기 전에 주 스레드가 uitextview에 대한 업데이트를 완료하지 못했습니다. – jx12345