2011-09-03 4 views
0

나는 버튼을 클릭하면에 대한 IBAction를 가지고 :인터페이스 객체가 왜 순서가 맞지 않게 반응합니까?

- (IBAction)importButtonClicked:(id)sender 

을 그리고 일련의 이벤트가 같은 장소를 먹고 싶어 :

[_progressLabel becomeFirstResponder]; // I tried this but to no effect 
_progressLabel.stringValue = BEGIN_IMPORT_STRING; 
[_importButton setEnabled:FALSE]; 
_fileField.stringValue = @""; 
[_progressIndicator startAnimation:nil]; 

그러나 끝 일어나고있는 것은 애니메이션이 발생하는 _progressIndicator입니다 _progressLabel 텍스트가 나타납니다. 종종 _progressIndicator 애니메이션이 중지 될 때까지 텍스트가 표시되지 않습니다. 어떻게 수정해야합니까?

+0

'[CATransaction begin]과'[CATransaction commit]'사이에 코드를두면 도움이됩니까? 코어 애니메이션 OS 버전을 사용 중이라고 가정합니다. – lbergnehr

+0

CATransaction은 인식되지 않지만 당신이 뭔가있는 것 같아요. 문제는이 코드 블록과 관련이 없습니다. 다음 코드 블록이 모든 리소스를 차지하고 있으며 완료되기 전에 완료되지 않은 것입니다. 하지만 xib 파일에서 Appkit을 사용하고 있습니다. –

+0

동일한 스레드에서 '무거운'작업을 동 기적으로 수행합니까? 이 경우 UI가 차단되어 원하는 동작을 얻지 못할 수도 있습니다. – lbergnehr

답변

2

진행중인 작업을 별도의 스레드에서 수행하는 데 시간이 걸립니다 (진행 표시기가있는 것으로 가정). Cocoa에서 수동으로 할 필요는 없지만 대신 Grand Central Dispatch (GCD), NSOperationQueue 또는 이와 같은 구문을 사용할 수 있습니다. GCD에 대한 많은 자료를 찾을 수 있습니다.

관련 문제