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

时间:2013-06-11 00:49:23

标签: objective-c 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;

2 个答案:

答案 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中设置停止条件以结束"两级"递归调用。

相关问题