2012-04-30 2 views
0

NSLocalizedStringのために奇妙なクラッシュが発生しています。 - [CFString retain]:解放されたインスタンス0x3c6ad0に送信されたメッセージ。Objective-C、NSLocalizedStringランダムクラッシュ

NSLocalizedStringは、静的な文字列で置き換えるときと同じです。すべてがうまくいく。ここで私はエラーがある行です。

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

sBackButtonDefaultTitleは「戻る」です。

ランダムにするのは、ときどきクラッシュしたり、時にはクラッシュしないことです。

EDIT:ヘッダーファイルで

がsBackButtonDefaultTitleが定義されている

#define sBackButtonDefaultTitle @"Back" 

ヘッダは、当然のことながら、.Mファイルにインポートされます。

EDIT:

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

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

本当に不思議です。私は誰かが私がそれを修正するのを助けることを願っています

答えて

0

このクラッシュは、コード内のそのポイントの前に解放されているが原因です。あなたがそれを所有しているときにそれを保持していることを確認し、の後にをリリースしていることを確認してください。

+0

定義に定義されている文字列で、割り当てられるオブジェクトがオブジェクトではありません。 –

+0

@ShatouDev質問を編集して、文字列がどこでどのように定義されているかを表示してください。 –

1

NSLocalizedStringに電話すると、sBackButtonDefaultTitleが割り当て解除されているはずです。

私はそれが自動リリースされた文字列だと思います。

NSZombieを有効にして確認してください。

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

+0

sBackButtonDefaultTitleは定義ファイルで定義されています。 –

+0

「定義ファイル」を表示してください。 – Macmade

+0

#define sBackButtonDefaultTitle @ "Back" –

0

NSLocalizedStringを使用する良い理由は、アプリに複数の言語をサポートすることです。 NSLocalizedStringは、通常、文字列リソースファイルに適しているため、システムにUIを設定するために使用する言語を動的に決定することができます。 NSLocalizedStringをあなたのやり方で使うことは一度もありませんでしたが、文字列リソースファイルを使うことは間違いありません。見てくださいApple's Guidelines for Internationalizationstring resource file

希望します。

+0

私は既に文字列ファイルを使用しています。しかし、ある時点で、iOSはsBackButtonDefaultTitleのローカライズされた文字列を見つけることができないようです。 –

+0

iOSが文字列ファイルから他の文字列を見つけることはできますが、sBackButtonDefaultTitleは見つからないことを意味しますか?以前はそのような事例は見たことがなかった。すべての文字列を認識できなかった場合、文字列ファイルは正しく作成されませんでした。したがって、Appleが提供するサンプルに従って、コマンドラインツールからファイルを生成する必要があります。 –

+0

それは私を狂ったものにするものです!私は本当になぜこれが起こるのか分からない! –

関連する問題