문제

'변환'버튼이있는 앱이 있습니다. 이 버튼을 클릭하면 앱은 Nstask를 사용하여 새로운 프로세스를 시작한 다음 프로세스가 완료 될 때까지 버튼을 다시 시작합니다.

내 문제는 앱이 프로세스가 완료되기를 기다리는 동안 사용자의 클릭을 저장한다는 것입니다. 따라서 버튼이 회색으로 나오더라도 사용자는 클릭 할 수 있으며 프로세스가 끝나 자마자 즉시 다시 시작됩니다.

프로세스가 사용을 완료하기를 기다리고 있습니다.

[task waitUntilExit];

이 작업이 완료되기를 기다리는 동안 사용자 입력을 어떻게 무시합니까?

도움이 되었습니까?

해결책

-[NSTask waitUntilExit] 물론 차단 호출입니다. 즉, 스레드가 일시 중지 된 것을 의미하며 (실행 루프와 마찬가지로) 스레드로 전송되는 모든 이벤트는 런 루프가 처리 할 수있을 때까지 대기됩니다.

대신에 waitUntilExit, 나는 다음과 같은 일을 할 것입니다.

- (IBAction) myButtonMethod {
  NSTask * task = ....;
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskFinished:) name:NSTaskDidTerminateNotification object:task];
  [myButton setEnabled:NO];
  [task launch];
}

- (void) taskFinished:(NSNotification *)note {
  [myButton setEnabled:YES];
}

이 작업은 작업을 시작하고 버튼을 비활성화하지만 스레드를 차단하지는 않습니다. 스레드가 끝날 때까지 기다리지 않기 때문입니다. 대신, 작업이 완료 될 때마다 비동기식 알림을 기다리고 있습니다. 작업이 완료 될 때까지 버튼이 비활성화되므로 전송 된 모든 이벤트가 무시됩니다.

다른 팁

더 쉽게 :

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top