2012-01-24 70 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

聲明局部變量的if-else語句

+0

這是正確的,它超出了範圍,當你試圖在if外面使用它時,用'NSString * thisString;'聲明它,然後在if語句中設置值。 –