1

NSLocalizedString が原因で奇妙なクラッシュが発生しています。-[CFString 保持]: 割り当て解除されたインスタンス 0x3c6ad0 に送信されたメッセージ。

静的文字列に置き換えたときのように、それは NSLocalizedString によるものだと確信しています。すべてうまくいく。エラーが発生した行は次のとおりです。

[_backButton setTitle:NSLocalizedString(sBackButtonDefaultTitle, nil) forState:UIControlStateNormal];

sBackButtonDefaultTitle は「戻る」です。

ランダムにしているのは、クラッシュする場合とそうでない場合があることです。

編集:

sBackButtonDefaultTitle はヘッダー ファイルで定義されます

#define sBackButtonDefaultTitle @"Back"

もちろん、ヘッダーは .m ファイルにインポートされます。

編集:

詳細...この戻るボタンのタイトルは、アプリケーション全体で使用されます。ほとんどすべてのコントローラーで。ただし、クラッシュは特定のコントローラーを押した後にのみ発生します。

このコントローラーには Web ビューが含まれています。[戻る] ボタンをタップすると、コントローラーがポップされます。クラッシュはありません。しかし、同じ「戻る」ボタンでコントローラーを押すと、アプリケーションがクラッシュし、上記のエラーが発生します。

本当に不思議です。誰かがそれを修正するのを手伝ってくれることを願っています。

4

3 に答える 3

1

sBackButtonDefaultTitleを呼び出したときに割り当てが解除されているためですNSLocalizedString

自動解放された弦だと思います。

NSZombie が有効になっていることを確認してください。

sBackButtonDefaultTitle作成時に文字列を保持し、NSLocalizedString呼び出し後に解放する必要がある場合があります。

于 2012-04-30T20:28:34.530 に答える
0

NSLocalizedString を使用する正当な理由は、アプリで複数の言語をサポートするためです。NSLocalizedString は通常、文字列リソース ファイルに適しているため、UI に入力するために使用する言語をシステムが動的に決定できます。私はあなたのように NSLocalizedString を使用しようとしたことはありませんが、文字列リソース ファイルを使用すると確実に機能すると言えます。Apple の国際化ガイドライン文字列リソース ファイルをご覧ください。

それが役に立てば幸い。

于 2012-04-30T22:11:28.847 に答える
0

このクラッシュはsBackButtonDefaultTitle、コード内のその時点より前にリリースされたことが原因です。所有するときにそれを保持していること、およびそのコード行で使用した後に解放していることを確認してください。

于 2012-04-30T20:27:46.920 に答える