首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可可-UI:延迟performSelector。延后

可可-UI:延迟performSelector。延后
EN

Stack Overflow用户
提问于 2011-11-09 08:34:37
回答 1查看 516关注 0票数 2

上下文

在我的mac应用程序中,当我单击一个列表项时,会向一个对象发送一个通知,该对象在UI上有一条等待消息,该对象在后台做一些事情。所有这些都发生在一个窗口中,您可以通过“关闭”按钮退出。默认情况下,发送通知时将禁用该按钮。

我想做的是一个超时功能,允许用户在几分钟后退出这个窗口,从而启用关闭按钮。

代码

代码语言:javascript
复制
- (IBAction)onChangeOperator:(id)sender
{
    [self performSelector:@selector(timerFired:) withObject:nil afterDelay:2.0];
    ....
    ....
    //takes time
    ....
}

-(void) timerFired:(NSTimer *) theTimer {
[close_button setEnabled:YES];
}

问题:在onChangeOperator完成之前,按钮是不启用的,而我希望在启动选择器之后立即启用该按钮。

我想这是一条线,但我搞不懂。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-09 08:56:39

在文档中,performSelector:withObject:afterDelay:

在延迟后使用默认模式在当前线程上调用接收方的方法。

因此,当前线程仍然被阻塞。相反,您应该在一个新线程上在onChangeOperator中运行昂贵的操作:

代码语言:javascript
复制
- (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....
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8062196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档