3

次の操作を行うと、「format not a string...」というメッセージが表示されます。

NSString* string1 = [[NSString alloc] initWithFormat:NSLocalizedString(@"Update Now", @"Update Now Item")];
NSString* string2 = [[NSString alloc] initWithFormat:NSLocalizedString(@"Register", @"Register Now")];

つまり、アプリはデバイスやシミュレーターでクラッシュせず、ローカライズされたテキストも問題なく表示されます。

この特定のエラー メッセージが表示される理由を理解しようとしています。私が知る限り、これは目的の C でローカライズされた文字列を使用する方法です。

4

4 に答える 4

6

ローカライズされた文字列を使用する最も簡単な方法は次のとおりです。

NSString* myString = NSLocalizedString(@"今すぐ更新",@"今すぐ更新");

ここで、myString が自動解放されることに注意してください。これは通常、文字列に必要です。

例では、文字列が保持されます (initWithFormat を使用しているため)。「今すぐ更新」などがユーザーUIに表示されると推測すると、おそらくUILabelを介して保持された文字列は必要ありません-文字列をUILabelに割り当てると、自動的に保持されます(テキストが保存されるため)留保財産)

于 2011-04-25T21:04:29.150 に答える
4

NSLocalizedString は実際にはマクロです。

[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]

では、フォーマットの置換などの後処理を行わない限り、一体なぜ別の NSString が必要なのですか? とにかく NSString を返します!

よろしければお取り置きも可能です...

于 2011-04-25T21:04:37.603 に答える
1

initWithFormat:フォーマット文字列を扱っていないため、ここでは使用しないでください。

ただし、使用する場合は、常に次のように使用してください。

[[NSString alloc] initWithFormat:@"%@", NSLocalizedString(@"Update Now", @"Update Now Item")];

NSLocalizedStringそうしないと、結果に文字列形式指定子 (など%d) が含まれ、アプリがクラッシュするリスクがあります。

于 2011-04-25T20:14:42.037 に答える
0

コンパイラによって報告された警告は正しいです。から返される文字列は、内部にフォーマット指定子がないためNSLocalizedString(@"Update Now", @"Update Now Item") 、フォーマット文字列ではありません。

Ican Zilbが別の回答で述べたように、最善の解決策は直接使用することです。

NSString* myString = NSLocalizedString(@"Update Now",@"Update Now Item");
于 2011-04-29T06:56:57.580 に答える