上下文:
在我的mac应用程序中,当我单击一个列表项时,会向一个对象发送一个通知,该对象在UI上有一条等待消息,该对象在后台做一些事情。所有这些都发生在一个窗口中,您可以通过“关闭”按钮退出。默认情况下,发送通知时将禁用该按钮。
我想做的是一个超时功能,允许用户在几分钟后退出这个窗口,从而启用关闭按钮。
代码:
- (IBAction)onChangeOperator:(id)sender
{
[self performSelector:@selector(timerFired:) withObject:nil afterDelay:2.0];
....
....
//takes time
....
}
-(void) timerFired:(NSTimer *) theTimer {
[close_button setEnabled:YES];
}问题:在onChangeOperator完成之前,按钮是不启用的,而我希望在启动选择器之后立即启用该按钮。
我想这是一条线,但我搞不懂。
发布于 2011-11-09 08:56:39
在文档中,performSelector:withObject:afterDelay:
在延迟后使用默认模式在当前线程上调用接收方的方法。
因此,当前线程仍然被阻塞。相反,您应该在一个新线程上在onChangeOperator中运行昂贵的操作:
- (IBAction)onChangeOperator:(id)sender
{
[self performSelector:@selector(timerFired:) withObject:nil afterDelay:2.0];
[self performSelectorInBackground:@selector(doUpdates) withObject:nil];
}
-(void) timerFired:(NSTimer *) theTimer
{
[close_button setEnabled:YES];
}
-(void)doUpdates
{
.... stuff that takes time....
}https://stackoverflow.com/questions/8062196
复制相似问题