1

私は列挙型のプロパティを持っています:

typedef enum syncCodeTypes {
    kCodeNull, 
    kCodeFoo,
    kCodeBar,
    kCodeDone
} syncCodeType;

//...

@property syncCodeType syncCode;

私はそれを使用しますstringWithFormat:

[self showAlertWithMessage:NSLocalizedString(@"Sync Error", @"Sync Error") andInfo:[NSString stringWithFormat:NSLocalizedString("Heads up re foobar code %d.", "Heads up re foobar code %d."), self.syncCode]];

…そして、次の警告が表示されます。

互換性のないポインター型から localizedStringForKey:value:table の引数 1 を渡しています。

%u符号なしの変換指定子 (の代わりに)を代用すると、同じことが起こります%d%luコンパイラは、%ld%llu、またはどちらも好きではありません%lld

関連する言語に関する他の投稿では、列挙型は符号付きでも符号なしでもないとアドバイスされているため、列挙型を符号付き整数と符号なし整数に明示的にキャストしようとしましたが、まったく同じエラー メッセージが表示されました。

NSInteger iSyncCode = self.syncCode;
[self showAlertWithMessage:NSLocalizedString(@"Sync Error", @"Sync Error") andInfo:[NSString stringWithFormat:NSLocalizedString(“Heads up re foobar code %d.", “Heads up re foobar code %d."), iSyncCode]];
// compiler still annoyed

NSUInteger uSyncCode = self.syncCode;
[self showAlertWithMessage:NSLocalizedString(@"Sync Error", @"Sync Error") andInfo:[NSString stringWithFormat:NSLocalizedString(“Heads up re foobar code %u.”, “Heads up re foobar code %u.”), uSyncCode]];
// compiler still annoyed

実行時に問題はありません — 今のところ。しかし、私はコーシャになりたいです。助言がありますか?

4

2 に答える 2

3

@の文字列の前の - 記号を忘れましたNSLocalizedString

に置き換え"Heads up re foobar code %d."ます@"Heads up re foobar code %d."

于 2013-04-20T15:50:14.243 に答える
1

%d書式指定子は変数用ですint。しかし、でself.syncCodeはないint、それはsyncCodeTypeです。

値を次のようにキャストする必要がありますint

(int)self.syncCode

または行全体:

[self showAlertWithMessage:NSLocalizedString(@"Sync Error", @"Sync Error") andInfo:[NSString stringWithFormat:NSLocalizedString(@"Heads up re foobar code %d.", @"Heads up re foobar code %d."), (int)self.syncCode]];

これにより、コンパイラが満足します。

PSそして、phix23が指摘するように、NSStringC文字列リテラルではなく、リテラルを渡す必要がありますNSLocalizedString

于 2013-04-20T15:51:16.303 に答える