如果陈述......我不知道为什么它没有触发

时间:2013-07-25 05:03:03

标签: iphone ipad

出于某种奇怪的原因, 否则如果 条件未得到满足则宣布获胜者。我调试并跟踪了该条件的值,它为3个变量保留值2,但不会触发满足条件的 NSLog 。我错过了明显的血腥或真的很累(是的......我很累)?花了好几个小时试图解决这个问题。符合 X 条件并执行它的 NSLog 声明......但是对于我的生命...... O没有。

我已经尝试过了{}我已经尝试过没有{}了。我已经尝试了一切......坚持下去。

我尝试了O值的条件,但它没有用。 Hmmmm。它不喜欢那该死的2!呵呵呵。

 -(void)chkWinner   
  {
    NSLog(@"At the top of Check Winner method, player %d %d %d ", tl_Int, tm_Int, tr_Int);

    if(tl_Int & tm_Int & tr_Int == 1)
    {
       NSLog(@" X is the WINNER %d %d %d", tl_Int, tm_Int, tr_Int);
    }
    else if(tl_Int & tm_Int & tr_Int == 2)
    {
       NSLog(@" O is the WINNER %d %d %d", tl_Int, tm_Int, tr_Int);
    }
    else
    {
        NSLog(@"In Check Winner method, player %d %d %d ", tl_Int, tm_Int, tr_Int);
    }
}

这是按下按钮的代码。它将值传递给方法......我只是不知道为什么它适用于一个值而不是另一个值。

-(IBAction) topLeftBtn:(id) sender
{

    if(playerX.enabled == true)
    {
        tl_Int = 1;
        NSLog(@" X %d ", tl_Int);
        [tlBtn setImage:[UIImage imageNamed:@"X.png"] forState:UIControlStateNormal];
        playerX.enabled = false;
        tlBtn.enabled = false;
        blockingBtn.enabled = true;
        blockingBtn.hidden = false;
        topLSquare.image = [UIImage imageNamed:nil];
        SEL methodSelector1 = @selector(chkWinner);
        [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:methodSelector1 userInfo:nil repeats:NO];

    }    

    if(playerO.enabled == true)
    {
        tl_Int = 2;
        NSLog(@"TL O %d ", tl_Int);
        [tlBtn setImage:[UIImage imageNamed:@"O.png"] forState:UIControlStateNormal];
        playerO.enabled = false;
        tlBtn.enabled = false;
        blockingBtn.enabled = true;
        blockingBtn.hidden = false;
        topLSquare.image = [UIImage imageNamed:nil];
        SEL methodSelector1 = @selector(chkWinner);
        [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:methodSelector1 userInfo:nil repeats:NO];

     }

}

这里甚至是输出窗口:

2013-07-25 00:43:08.167 [16079:c07] TR O 2 
2013-07-25 00:43:08.170 [16079:c07] At the top of Check Winner method, player 0 0 2 
2013-07-25 00:43:08.172 [16079:c07] In Check Winner method, player 0 0 2 
2013-07-25 00:43:10.934 [16079:c07] TM O 2 
2013-07-25 00:43:10.938 [16079:c07] At the top of Check Winner method, player 0 2 2 
2013-07-25 00:43:10.939 [16079:c07] In Check Winner method, player 0 2 2 
2013-07-25 00:43:14.444 [16079:c07] TL O 2 
2013-07-25 00:43:14.447 [16079:c07] At the top of Check Winner method, player 2 2 2 
2013-07-25 00:43:14.449 [16079:c07] In Check Winner method, player 2 2 2 

值存在,但没有NSLog输出显示已满足条件...发出断点并进入调试,进入代码并在满足条件时直接遍历NSLog。帮助...

3 个答案:

答案 0 :(得分:3)

你应该尝试两件事。

首先是改变所有单曲'&'加倍'&&' (假设您正在检查AND。

第二个是询问每个变量是否等于1而不是将它们全部混合在一起。

一个好的if语句看起来像这样:

if(tl_Int == 1 && tm_Int == 1 && tr_Int == 1)

答案 1 :(得分:0)

尝试计算tl_Int& tm_Int& tr_Int并将其分配给临时变量,然后在if / elseif条件中使用它。 - 没试过,但你可能想尝试一下

答案 2 :(得分:0)

只需更改所有单曲'&'加倍'&&'你的问题会解决。

根据你的情况,NSLog调用取决于tr_Int的值,如果它将为1,那么它将调用第一个NSLog,如果它是2,那么它将调用第二个,否则为第三个。

IT只是检查 tr_Int ==

的条件