0

こんにちは私はアプリケーションを書いています、そして私は文字列を作成したいと思います。

だから私はそれを使います

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];
  }
}

クラッシュ!! しかし、scoreStringのような別の文字列を使用すると、機能します...

initメソッドで私は持っています

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];

私はまた、初期化メソッドを持っています

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

そして実際に機能します...メソッドが呼び出されるまで。

数値は間違っている可能性がありますが、テスト目的であるため、@ "test"を使用しても問題は文字列totalCupCakesにあるようですが、その文字列の何が問題になっていますか?

4

2 に答える 2

0

次のような文字列メソッドを使用します。

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

文字列を追加する代わりに使用する方が簡単です。

于 2012-06-21T15:24:22.340 に答える
0

私が正しく理解していれば、あなたの問題はすべて保持されていない文字列が原因です。stringWith...NSString クラスのすべてのコンストラクターは、自動解放されたオブジェクトを返します。作成後にそれらを保持し、dealloc メソッドで解放します。

あなたの場合、メソッドを呼び出す瞬間まで、文字列は割り当てが解除され、有効なオブジェクトではありません

于 2012-06-21T15:22:14.127 に答える