2012-01-24 6 views
4

OK、私は正式に怒っています。私は以前はIOSプロジェクトを開始していましたが、ちょっとした混乱になってしまいました。NSLocalizedStringは、どこにも定義されていないテキストを返します。

ローカライゼーションを一から行うことにしたので、.stringsファイルをすべて破棄し、適切なマルチ言語構造を作成しました。私は空のLocalizable.stringsファイルを使い始め、アプリケーションを実行してすべてを適切にクリーンアップしたかどうかを確認します。空のLocalizable.stringファイルでは、私は "NSLocalizedString"呼び出しがキーを単にテキストとして返すと仮定しました。彼らはしません。彼らはまだ古い.stringsファイルにあった古いテキストを返します。

念のために、私はNSLocalizedStringの一つ下のNSLog文を置くのような呼び出し:

NSString *text = NSLocalizedString(key, nil); 
NSLog(@"key=%@ text=%@", key, text); 

それから私が返されたテキストのために私の全体のハードディスクを検索します。私のハードディスク上にNSLocalizedStringが返す文字列はファイルには含まれていません。そしてそれはキーとはまったく異なる文字列なので、NSLocalizedStringで構築することはできません。

これがどのように起こる可能性がありますか?古い情報はXcodeによってどこかにキャッシュされていますか?新しいLocalizable.stringsファイルを使用するようにツールを説得するにはどうすればよいですか?明らかに、私はすでにプロジェクト全体をクリーンアップして再構築しています。

+2

デバイスからアプリを削除してもう一度実行してみてください。過去に削除されたリソースは開発中にデバイス上で削除されないことに気付きました。 –

答えて

4

アプリを電話から削除してから、プロジェクトをクリーンアップし、アプリを再インストールしてみてください。

まだ動作しない場合は、ビルドルール(Xcode 4 - >ターゲットを選択 - >タブ "ビルドルール")を何らかの形で混乱させていないことを確認してください。多くの "CopyStringsFile"ルールを使用していない "CopyStringsFile"ルールそうであれば、1つ以外のすべてを削除できます。

+0

ありがとうございます。デバイス(私の場合はシミュレータ)からアプリを削除すると、そのトリックがやりました。 – fishinear

+0

はい、シミュレータからAppを削除すると機能しました。 – RocketMan

0

ビルドフォルダもクリーンでしたか?コマンド+ option + shift + kを押すか、製品に移動し、オプションを押すとクリーンビルドフォルダが作成されます。通常、リソースファイルはキャッシュされますが、リソースファイルの置き換え(ファイル名は同じですがオブジェクトが異なるファイル)はXCode

また、アプリ/リセットシミュレータを削除すると役立ちます。削除したファイルは、再配備すると削除されないことがあります。

+0

チップのおかげで、私はその可能性について知りませんでした。残念ながら、それは実際に – fishinear

+0

を助けていない、あなたのシミュレータ/デバイスからアプリを削除しようとしましたか?それは助けるかもしれない! –

0

シミュレータでテストする場合は、「iOSシミュレータ」アプリケーションメニューの[コンテンツと設定をリセット...]オプションを使用してシミュレータをリセットしてみてください。

新しいビルドを再デプロイすると、クリーンビルド後でも、以前ビルドされたバージョンのキャッシュされたコンテンツがクリアされないことがあります。

関連する問題