我试图弄清楚如何使用performSelector:afterDelay:在按钮执行其功能之前创建一个5秒的暂停。我从没有延迟的版本开始:
-(IBAction)immediateActivate:(id)sender {
switch1.on = YES;
}
效果很好。按下按钮,开关打开。
然后我做了以下操作来创建延迟:
-(IBAction)delayedActivate:(id)sender
{
[self performSelector:@selector(immediateActivate) withObject:nil afterDelay: 5.0];
}
-(void)immediateActivate:(id)sender {
switch1.on = YES;
}
我在Interface Builder中更改了连接,因此该按钮现在触发delayedActivate。它构建没有错误,但当我按下我的按钮时,我仍然可以立即激活。谁能看到我做错了什么?
谢谢,
Dessie。
答案 0 :(得分:2)
我猜测虽然你说“我在Interface Builder中更改了连接”,但你没有 - 你仍然可以从按钮连接到immediateActivate。你也可以也挂钩到delayedActivate,但它可以被挂钩到多个动作。要确认这一点,如果您不太了解如何在IB中使用连接检查器,最简单的方法就是为每个方法添加一个NSLog,以便您可以查看控制台以查看每个方法的调用时间。 - 嘿,在我打字的时候,别人给了同样的答案! :)
答案 1 :(得分:1)
听起来您可能已将按钮连接到这两个操作,请在Interface Builder中检查。右键单击该按钮,然后展开“操作”下的连接。
如果是这种情况,你会看到immediateActivate:先火,然后是delatedActivate:5秒后激活。您可以使用几个断点或NSLog(@"Here!");
语句来检查这一点。
答案 2 :(得分:0)
通过调试器检查流量是什么意思-(IBAction)immediateActivate:(id)sender
首先调用immediateActivate
或immediateActivate
首先调用。
希望你在IBConnection中失去作用。
答案 3 :(得分:0)
只是旁注,调试器中似乎存在错误。我正在使用Xcode 4.3,虽然这也发生在4.2.1上。如果您在performSelector:
延迟调用后立即创建断点,即使应用程序在断点处暂停,也会测量延迟,如果在此暂停时间内达到延迟时间,则选择器将立即执行。但是,在正常的代码执行中,一切正常。