我希望在每个输出结果之间延迟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;
答案 0 :(得分:1)
这只是一个编译错误,因为dealCard
不是dealCard
方法中的变量。您可以将选择器作为参数传递。这样就可以了:
[self startPause:@selector(dealCard)];
甚至
[self startPause:_cmd];
因为_cmd
为您提供了当前的选择器,而您恰好位于dealCard
。但请注意,通常“sender”参数不用于传递选择器,而是用于传递对象。例如UIButton
发送消息的实例,如:
- (IBAction)myButtonResponse:(id)sender;
将传递self
作为sender参数。
答案 1 :(得分:1)
您可以使用
调用IBAction
方法
[self startPause:nil];
因为永远不会使用sender
参数。请记住,dealCard
是一个方法,它有一个选择器关联。它不是属性(甚至不是对象),因此您不能仅使用其名称将其作为参数传递。
你也有一个递归问题。 dealCard
再次调用startPause:
和startPause:
来电dealCard
。您应该在dealCard
中设置停止条件以结束"两级"递归调用。