2012-01-24 2 views
3

Попытка установить имя спрайта с помощью оператора if, а затем загрузить соответствующий файл на основе этой строки. Похоже, есть проблема с моей областью переменных, но я не знаю, что это такое.Objective C - XCode не распознает переменную за пределами оператора if

Вот мой код:

if ([[GameManager sharedGameManager] newHighScore] == TRUE) { 
    NSString *highScoreLabelText = @"label-new-high-score.png" 
} else { 
    NSString *highScoreLabelText = @"label-high-score.png" 
} 

CCSprite *highScoreLabel = [CCSprite spriteWithSpriteFrameName:highScoreLabelText]; 
[highScoreLabel setAnchorPoint:ccp(0,0)]; 
[highScoreLabel setPosition:ccp(20, winSize.height * 0.575f)]; 
[self addChild:highScoreLabel]; 

XCode ослабевает ошибку, говоря, что highScoreLabelText является необъявленный идентификатор, и, таким образом, не будет компилировать приложение. Нужно ли мне объявлять что-то еще вместе с NSString, чтобы заставить остальную часть кода работать с переменной?

ответ

10

Это потому, что вы объявили две отдельные переменные внутренней области видимости в обеих ветвях if. Ни одна из этих двух переменных не видна за пределами ее области, поэтому вы получаете сообщение об ошибке.

Вы должны переместить декларацию из if, как это:

NSString *highScoreLabelText; 
if ([[GameManager sharedGameManager] newHighScore] == TRUE) { 
    highScoreLabelText = @"label-new-high-score.png" 
} else { 
    highScoreLabelText = @"label-high-score.png" 
} 

Теперь highScoreLabelText видна за пределами Вашего if заявления.

+0

Приятно вам сказать, что я сказал в коде. – MyKuLLSKI

+0

@MyKuLLSKI За последние несколько месяцев я заметил, что правильные ответы с большим количеством деталей привлекают больше внимания, чем просто правильные ответы; правильные ответы с кодом и множество деталей получают еще больше внимания. Предоставление деталей или исправление кода OP требует времени, поэтому вы часто отправляете свой ответ позже, чем кто-либо, кто заметил ошибку одновременно с вами. Я не являюсь одним из самых быстрых машинисток, поэтому у меня есть относительный недостаток. Когда я вижу ответ сопоставимого качества, опубликованный перед моим ответом, я удаляю свой ответ, если не вижу ошибок в коде другого ответа. – dasblinkenlight

3

Объявите локальную переменную вне если-другое заявление

+0

это правильно, оно выходит за рамки, когда вы пытаетесь использовать его за пределами if, объявите его раньше с помощью 'NSString * thisString;', а затем просто установите значение в инструкции if. –

Смежные вопросы