2015-04-11 2 views
-3

Я исследовал онлайн и не мог найти ответ. На Xcode 6 У меня ошибка:Семантический выпуск: сравнение между указателем и целым числом

семантический вопрос: Сравнение между указателем и целое ('UILabel *' и 'INT')

Код (ViewController.m):

-(void)enemyMovement { 

enemyShip.center = CGPointMake(enemyShip.center.x, enemyShip.center.y + 2); 

if (CGRectIntersectsRect(enemyShip.frame, mothersShip.frame)) { 
    lives = lives - 1; 
    liveString = [NSString stringWithFormat:@"LIVES: %i", lives]; 
    livesLabel.text = liveString; 

    //Stop enemy moving 
    [enemyMovementTimer invalidate]; 

    if (livesLabel > 0) { 
     [self positionEnemy]; 
    } 



    if ((livesLabel = 0)) { 
     [self gameOver]; 
    } 


    } 
} 


-(void)gameOver { 

[enemyMovementTimer invalidate]; 
[missleMovementTimer invalidate]; 
[self performSelector:@selector(replayGame) withObject:nil afterDelay:3]; 



} 



- (void)replayGame { 

    score = 0; 
    lives = 3; 

    scoreString = [NSString stringWithFormat:@"SCORE: 0"]; 
    liveString = [NSString stringWithFormat:@"LIVES: 3"]; 

    scoreLabel.text = scoreString; 
    livesLabel.text = liveString; 

    startButton.hidden = YES; 

    friendlyShip.hidden = NO; 
    enemyShip.hidden = NO; 
    mothersShip.hidden = NO; 

    scoreLabel.hidden = NO; 
    livesLabel.hidden = NO; 

    [self positionEnemy]; 

} 

Ошибка возникает, когда целое число равно «1», но когда целое число равно «0», ошибка не возникает, а жизнь переходит в отрицательные числа, но команда не встречается ни для одного числа. Команда должна вернуться к началу игры. Я думаю, что проблема связана с тем, как вызывается ярлык жизни, я также думаю, что это может быть что-то вроде «==». Но я не совсем уверен, что я пытался решить эту проблему, но я был неудачным, несколько раз. Я надеюсь, что вы можете мне помочь.

Спасибо заранее

+0

FYI - Не используйте '=' для равенства, его для назначения. Используйте '==' для сравнения для равенства. – rmaddy

+0

Пожалуйста, изучите C, прежде чем пытаться использовать Objective-C. –

+0

Похоже, что 'livesLabel' - это ярлык. Нет смысла сравнивать его с целыми числами. – danh

ответ

1

livesLabel > 0 сравнивает адрес памяти объекта livesLabel с номером 0. Вы хотите сравнить 0 с текстом, который показывает этикетка. Сравнение будет выглядеть так: [livesLabel.text intValue] > 0

0

Вы сравниваете этикетку с номером. Возможно, вам придется переучивать некоторые фундаментальные концепции программирования, и я не могу вам помочь, но UILabel имеет свойство text, которое может быть проанализировано в int с помощью intValue.

не
if (livesLabel > 0) { 
    [self positionEnemy]; 
} 



if ((livesLabel = 0)) { 
    [self gameOver]; 
} 

Я даже не могу сказать, что вы пытаетесь достичь, вы должны сравнить lives вместо, а не ярлык к ряду, его, как пытаются сравнивать наклейку с номером, он делает абсолютно никакого смысла ,

+0

1) Вам нужно показать, что такое 'livesLabel' и как вы его получили. 2) Вы не можете использовать '=' для сравнения целочисленного значения. Используйте '=='. – rmaddy