12

NSString があり、次のステートメントを適用できません。

NSString *myString = @"some text";
[myString stringByAppendingFormat:@"some text = %d", 3];

ログもエラーもありません。文字列は変更されません。私はすでに NSString (文書化されている) と NSMutableString を試しました。

どんな手がかりも大歓迎です。

4

4 に答える 4

37

(ドキュメント)に修正することをお勧めします:

NSString *myString = @"some text";
myString = [myString stringByAppendingFormat:@" = %d", 3];

ドキュメントから:

指定されたフォーマット文字列と次の引数から構築された文字列をレシーバーに追加して作成された文字列を返します。

于 2010-05-11T14:40:12.400 に答える
12

それは機能しています。書式が追加された文字列である戻り値を無視しているだけです。(ドキュメントを参照してください。) NSString を変更することはできません — NSMutableString を変更するには、代わりに-appendFormat:を使用してください。

もちろん、おもちゃの例では、次のように短縮できます。

NSString *myString = [NSString stringWithFormat:@"some text = %d", 3];

ただし、他の場所で作成された既存の文字列にフォーマット文字列を追加する必要がある可能性があります。その場合、特に複数の部分を追加する場合は、変更可能な文字列またはいくつかの不変で自動解放される文字列を使用することの長所と短所について考え、バランスを取ることをお勧めします。

于 2010-05-11T17:52:56.007 に答える
11

always で文字列を作成すると@""、不変の文字列になります。新しい NSMutableString を作成する場合は、次のようにします。

NSMutableString *myString = [NSMutableString stringWithString:@"some text"];
[myString appendFormat:@"some text = %d", 3];
于 2010-05-11T14:41:09.713 に答える
-1

ローカライズされた文字列を追加しているときに、同様の警告メッセージが表示されました。これが私がそれを解決した方法です

NSString *msgBody = [msgBody stringByAppendingFormat:@"%@",NSLocalizedString(@"LOCALSTRINGMSG",@"Message Body")];
于 2012-08-25T21:49:41.040 に答える