(IBAction)方法可以发送消息吗?



我想在每个输出结果之间延迟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中有一个停止条件来结束"两级"递归调用。

最新更新