2017-02-21 6 views
3

ここでは、一部の電話機にのみ表示される奇妙な問題が発生します。私はそのように初期化するカスタムUIViewがあります。 パラメータ付きのローカライズされた文字列でEXC_BAD_ACCESSがクラッシュする

let passQuizToTutorAlert = SAAlertView(title: NSLocalizedString("quiz-title", comment: ""), message: String(format: NSLocalizedString("quiz-message-parameter", comment: ""), 4), textAlignment: .left, customView: headerImageView, alternativeLayout: true) 

このエラーでクラッシュした上記の行

は: Thread 1: EXC_BAD_ACCESS (code = 1, address = 0x4)

私は、initで様々な方法で再生しました。パラメータを使ってローカライズされた文字列を使用するとクラッシュするように見えます。例えば、ここでのコードには問題がありません:それは上のクラッシュ

let passQuizToTutorAlert = SAAlertView(title: NSLocalizedString("quiz-title", comment: ""), message: NSLocalizedString("quiz-message", comment: ""), textAlignment: .left, customView: headerImageView, alternativeLayout: true) 

ローカライズされた文字列は、そのように定義されています

"quiz-message-parameter" = "You have %d credits left"; 

は、私がここで間違って何をしているのですか?なぜそれは、ローカライズされた文字列のパラメータでクラッシュするだけですか?

編集:

少しデバッグしました。このクラッシュはアラートビューから独立しています。試してみると:

let aString = String(format: "You have %d credits left", 4) 
     print(astring) 

クラッシュしません。

let aString = String(format: NSLocalizedString("quiz-message-parameter", comment: ""), 3) 
+3

まず第一に、関連性のないものから問題を分離してください。 'NSLocalizedString()'は正しい結果を返しますか? 'String(format:"%dクレジットが残っています "、4)'は動作しますか?これはSAAlertViewにまったく関連していますか? *デバッグ!* –

+0

SAAlertViewとは独立しています。文字列形式のNSLocalizedStringを使用する場合にのみクラッシュします。 @MartinR – Kex

+0

シミュレータまたはデバイスですか?どのデバイスですか? –

答えて

3

変数EXC_BAD_ACCESSの原因となるため、間違ったプレースホルダを持つ形式:しかし、それは、それがクラッシュしたローカライズされた文字列と混合していますとき。

NSLocalizedString()の場合は、利用可能なすべての言語のすべてのバージョンをチェックしてください。それは私のプロジェクトでずっと前に起こっていない

、1以外のすべてのバージョンについては、プレースホルダが%dで、一つには電話が犯人言語にしただけでクラッシュを引き起こし、%@ました。

関連する問題