我想在每个输出结果之间延迟1秒。下面代码的最后一行抛出了一个错误"使用未声明的标识符'dealCard'",但是我已经在头文件中声明了它,如下所示。
- (IBAction)startPause:(id)sender
{
if ([self.deal length]>cardNum) {
timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(dealCard) userInfo:nil repeats:NO];
card.text = [NSString stringWithFormat:@"%i",cardNum];
[timer fire];
}
}
- (void) dealCard{
NSLog(@"dealCard: %d: ", cardNum+self.randCut);
cardNum=cardNum + 1;
[self startPause:(id)dealCard];
}
下一个是头文件
- (IBAction) startPause:(id)sender ;
- (void) dealCard;
这只是一个编译错误,因为dealCard
不是dealCard
方法中的变量。可以传递选择器作为参数。可以这样做:
[self startPause:@selector(dealCard)];
或者
[self startPause:_cmd];
因为_cmd
给了你当前的选择器,而你恰好在dealCard
。不过要注意,通常的"sender"参数不是用来传递选择器的,而是用来传递对象的。例如,UIButton
的实例发送如下消息:
- (IBAction)myButtonResponse:(id)sender;
将传递self
作为sender参数
你可以用
调用你的IBAction
方法[self startPause:nil];
,因为从未使用sender
参数。记住,dealCard
是一个方法,它有一个关联的选择器。它不是一个属性(甚至不是一个对象),所以你不能只使用它的名字作为参数传递它。
你也有一个递归问题。dealCard
呼叫startPause:
, startPause:
再次呼叫dealCard
。您应该在dealCard
中有一个停止条件来结束"两级"递归调用。