2009-11-30 53 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];