0

我想在每个输出结果之间延迟 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;
4

2 回答 2

1

这只是一个编译错误,因为dealCard它不是dealCard方法中的变量。您可以将选择器作为参数传递。那将是这样的:

[self startPause:@selector(dealCard)];

甚至

[self startPause:_cmd];

因为_cmd给了你当前的选择器,而你恰好在dealCard. 但是请注意,通常“sender”参数不用于传递选择器,而是用于传递对象。例如UIButton发送消息的实例,例如:

- (IBAction)myButtonResponse:(id)sender;

将传递self给发送者参数。

于 2013-06-11T00:53:31.587 回答
1

你可以调用你的IBAction方法

[self startPause:nil];

因为该sender参数从未使用过。请记住,这dealCard是一个方法,它具有关联的选择器。它不是属性(甚至不是对象),因此您不能仅使用其名称将其作为参数传递。

你也有一个递归问题。dealCard调用startPause:,然后再次startPause:调用dealCard。您应该有一个停止条件dealCard来结束“两级”递归调用。

于 2013-06-11T01:02:53.830 回答