2011-12-27 11 views
1

Xcodeを使用して2つのXIBが含まれている単純なアプリケーションがあります(ファイルインスペクタペインでローカライズされています)。 アラビア語XIBはimageView内の画像が含まれており、また英語XIB:私はアプリが一つの小さな問題を除いて、完璧に動作し、アプリケーションの言語を切り替えると、他のローカライズXIBに切り替えるには、ルートビューコントローラxibに二つのボタンを配置していますimageView内の画像、バンドルのペン先から参照される画像を読み込むことができません

1)私はアラビア語に英語から言語を切り替えると、アラビア語XIBは場所ではなく、画像

せずに来るが含まれています

2)及びその逆、私はアラビア語から英語

3に切り替えたとき)でもアプリで画像が表示されない起動: Xcodeはアプリケーションをクラッシュすることなくコンソールでこれらの3例では、このエラーを生成します。

2011-12-27 12:48:30.412 LangSwitch[4903:f803] Could not load the "image1.png" image referenced from a nib in the bundle with identifier "(null)"

didFinishLaunchingWithOptions方法コード:

 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(lang:) name:@"Lang" object:nil]; 
// Override point for customization after application launch. 

// Set the navigation controller as the window's root view controller and display. 
NSString* str = [[[NSUserDefaults standardUserDefaults]valueForKey:@"AppleLanguages"] objectAtIndex:0]; 
NSBundle* bnd = [NSBundle bundleWithPath:[[NSBundle mainBundle]pathForResource:str ofType:@"lproj"]]; 
    RootViewController* cont = [[RootViewController alloc]initWithNibName:@"RootViewController" bundle:bnd]; 
self.window.rootViewController = cont; 
[self.window makeKeyAndVisible]; 

langセレクタコード:

 - (void)lang:(NSNotification*)sender{ 
//NSLog(@"%@",[sender object]); 
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:[sender object],nil] forKey:@"AppleLanguages"]; 
[[NSUserDefaults standardUserDefaults]synchronize]; 

NSString* str = [[[NSUserDefaults standardUserDefaults]valueForKey:@"AppleLanguages"] objectAtIndex:0]; 
NSBundle* bnd = [NSBundle bundleWithPath:[[NSBundle mainBundle]pathForResource:str ofType:@"lproj"]]; 
RootViewController* cont = [[RootViewController alloc]initWithNibName:@"RootViewController" bundle:bnd]; 
self.window.rootViewController = cont; 
[self.window makeKeyAndVisible]; 
} 

と私は上記の記述てるものを含んでいhere is the sample app。あなたがこの問題を解決するのに役立つなら、私はあなたにとても感謝しています。

は、事前にあなたをとても感謝...

答えて

1

私は、これはあなたがそれをやっている方法を行うことができるとは思わないし、その後も、あなたのアプリがApp StoreでのバウンスれますAPIを使用している - Changing language on the fly, in running iOS, programmatically

しかし、あなたが局在化する試みることができますイメージ(プロパティインスペクタを介して行われます)。

よりもむしろ、ローカライゼーションを変更して別のニブをロードしよう - あなたは手動でペン先を変更する必要があるとしています。ローカライズされた同じnibファイルを用意するのではなく、2つのnibファイルを作成し、ユーザーの選択に基づいて言語固有の言語をロードする必要があります。 。

本当に優れたローカリゼーションの変更を強制しようとすることで、ユーザによってではなく、自分でデバイスのレベルで行われている言語の選択 - 私が言ったようにAppleが推奨されていません。

+0

で、私は4つの画像(アラビア語の場合は2)と英語の場合は2つを作成し、4つの画像をローカライズしています。どうもありがとうございます。 – JAHelia

1

XIBファイルがメインバンドルからではなく、カスタム言語固有のバンドルから画像をロードします。

国際化アプリの言語をプログラム的に変更することはできません。ユーザーは電話設定で言語を変更できますが、変更することはできません。アプリケーションで複数の言語を使用する場合は、すべてのイメージリソースをメインバンドルに入れ(国際化なし)、独自の国際化メソッドを設定します(サンプル:pic.pngの名前をen-pic.pngおよびar-pic.pngに変更します)。 )

+0

イメージをメインバンドルに入れる方法は?どうやってやるの ?サンプルアプリケーションを見ると、両方のイメージはファイルシステム上のアプリケーションのルートレベルに置かれます。 – JAHelia

0

イメージ "image1.png"がプロジェクトに追加されているかどうかを確認してください。

もIBOutletコードで定義され、イメージにリンクされているか否かを検証します。

+0

BAsheerでは、IBOutletは必要ありません。画像のプロパティを変更したくないからです。image1とimage2の両方が正しくプロジェクトに追加されています。 – JAHelia

+0

を投稿したサンプルアプリをチェックすることで、サンプルアプリを高速共有からダウンロードできないことを確認できます。 イメージがターゲットに追加されているかどうかを確認できますか? XIBで誤った参照が行われたかどうかをIBにチェックインします。 プレビューで画像が正しく表示されていることを確認してください。その場合は、イメージを別の名前で再保存し、xibを更新してください。 ターゲットをクリーニングして実行します。 – Basheer

+0

Basheer、サンプルを送付するために私にあなたの電子メールを送ってください...私はあなたが上で言ったこと、同じ結果を完了しました... – JAHelia

0

私は単にXIBをxmlモードでブラウズし、相対フォルダパスを追加しました。例えば、私はイメージをimgフォルダに保存し、イメージ名はtest.pngです。今私はxmlモードに入り、test.pngをimg/test.pngに変更します

私のために働いた!

のRohit

2

問題はXIBファイルは、独自のローカルのバンドルで画像を求めているが、イメージはありませんし、当然、あなたがエラーを取得します。解決策は次のとおりです。

  • xibファイルから画像を削除します。つまり、空の画像ビュー、背景画像を持たないボタン、xibファイルのボタンなどしか持たないようにする必要があります。

  • アシスタントウィンドウを使用して、すべてのサブビューをヘッダーファイルに接続し、関連するプロパティを合成します。あなたのビューで

  • 手動でロードする方法は、同様にあなたのイメージを設定しました:

    [_logoImageView setImage:[UIImage imageNamed:@"logo.png"]]; 
    
    [_button1 setBackgroundImage:[UIImage imageNamed:@"buttonImage.png"] forState:UIControlStateNormal]; 
    

は今、あなたのイメージはメインバンドルからロードされているが、あなたのXIBファイルがローカライズされています。コンパイラはエラーを起こさない。

+0

私はそれを別の方法で解決しました。私はXcodeで "Bundle"ターゲットを使用するので、 "bundle identifier"をアプリケーションのものに変更しました。 – HyBRiD

+0

ありがとう、私は私のショーティーのプロジェクトでそれを試してみましょう。はるかに簡単です。 –

関連する問題