2009-11-30 40 views
1

我有一個「convert」按鈕的應用程序。當我點擊這個按鈕時,應用程序使用NSTask開始一個新的過程,然後灰色按鈕直到過程結束。在等待任務時忽略用戶輸入 - Objective-C

我的問題是,應用程序會保存用戶在等待過程完成時所做的任何點擊。所以即使該按鈕變灰,用戶也可以點擊它,並且該過程一旦完成就立即重新開始。

我在等待的過程中使用完成:

[task waitUntilExit]; 

如何忽略任何用戶輸入在等待這個任務完成?

回答

6

-[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]; 
} 

這將啓動你的任務,禁用按鈕,而不是阻塞線程,因爲你不等待它完成。相反,只要任務完成,您就等待異步通知。由於該按鈕被禁用,直到任務完成,這將忽略發送給它的所有事件。

0

更容易:

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];