2012-06-21 73 views
0

你好我正在寫一個應用程序,我想創建一個字符串。目標c追加字符串cocos2d

,所以我使用

NSString *scoreString; 
NSString *cupCakesPassedString; 
NSString *cupCakes; 
int cupCakesPassed; 
int totalCupCakesPerLevel; 

-(void)spriteMoveFinished:(id)sender { 

CCSprite *sprite = (CCSprite *)sender; 
[self removeChild:sprite cleanup:YES]; 

if (sprite.position.y <= 0) { 
    sprite.position = ccp(sprite.position.x,768); 
    score+=5; 
    scoreString=[NSString stringWithFormat:@"%i",score]; 
    [label setString:scoreString]; 

    cupCakesPassed++; 
    cupCakesPassedString=[NSString stringWithFormat:@"%i",cupCakesPassed]; 
    cupCakes=[[cupCakesPassedString stringByAppendingString:@"/"]stringByAppendingString:totalCupCakes]; 

    [passingCupCakes setString:cupCakes]; 
    } 
} 

崩潰!但如果在init方法使用另一個字符串像scoreString它的工作原理...

totalCupCakesPerLevel=30; 
scoreString=[NSString stringWithFormat:@"%i",score]; 
cupCakesPassedString=[NSString stringWithFormat:@"%i",cupCakesPassed]; 
totalCupCakes = [NSString stringWithFormat:@"%i",7]; 
cupCakes=[[cupCakesPassedString stringByAppendingString:@"/"]stringByAppendingString:totalCupCakes]; 

如果我這樣做

cupCakes=[[cupCakesPassedString stringByAppendingString:@"/"]stringByAppendingString:scoreString]; 

我也有在init()方法是

cupCakes=[[cupCakesPassedString stringByAppendingString:@"/"]stringByAppendingString:totalCupCakes]; 

實際上工作...直到方法被調用。

數字可能是錯誤的,但用於測試目的 似乎問題是與字符串totalCupCakes,因爲即使我使用@「測試」的作品,但什麼是錯誤的字符串?

+0

不會像[NSString stringWithFormat:@「%i /%i」,cupCakesPassed,totalCupCakes];更容易使用 – CBredlow

+0

非常感謝你,我在第一步,我錯過了一些明顯的。 – Haris

+0

什麼是確切的崩潰消息,請? – MechEthan

回答

0

使用字符串的方法是這樣的:

cupcakes = [NSString stringWithFormat:@"%d/%d", cupCakesPassed, totalCupCakes]; 

會更簡單,而不是使用附加的字符串。

0

如果我理解正確,所有的問題都是因爲沒有保留的字符串。 NSString類的所有stringWith...構造函數返回自動釋放對象。在你的dealloc方法中創建和釋放後保留它們。

在你的情況下調用方法的那一刻,字符串將被釋放,並不能有效對象

+0

我遵循CBredlow的建議。但是你是對的,謝謝你的回覆。當我開始清理垃圾時,我會用屬性修復它:D – Haris