0

最初の画面にユーザーが選択したテーブル ビューが表示される最初の iPhone アプリを作成しています。以下の方法でローカライズ前に動作します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

// Override point for customization after application launch.
navigationController = [[UINavigationController alloc] init];

[self.window addSubview:[self.navigationController view]];

if(self.selectCategoryViewController == nil)
{
    SelectCategoryViewController *viewTwo = [[SelectCategoryViewController alloc] initWithNibName:@"SelectCategoryViewController" bundle:[NSBundle mainBundle]];
    self.selectCategoryViewController = viewTwo;
    [viewTwo release];
}
[self.navigationController setNavigationBarHidden:YES];//this will hide the navigation bar
[self.navigationController pushViewController:self.selectCategoryViewController animated:YES];


//self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];

return YES;
}

日本語のローカライズ ファイルを追加し、上記を次のように変更してローカライズした後:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

// Override point for customization after application launch.
navigationController = [[UINavigationController alloc] init];

[self.window addSubview:[self.navigationController view]];


if(self.selectCategoryViewController == nil)
{

    NSBundle *myLocalizedBundle=[NSBundle bundleWithPath:[NSString stringWithFormat:[[NSBundle mainBundle]bundlePath],"en.lproj"]];
    NSLog(@"the localized bundle is %@",myLocalizedBundle);
    SelectCategoryViewController *viewTwo=[[SelectCategoryViewController alloc] initWithNibName:@"SelectCategoryViewController" bundle:myLocalizedBundle];

    self.selectCategoryViewController = viewTwo;
    [viewTwo release];


}
[self.navigationController setNavigationBarHidden:YES];//this will hide the navigation bar
[self.navigationController pushViewController:self.selectCategoryViewController animated:YES];

[self.window makeKeyAndVisible];

return YES;
}

次のエラーでクラッシュします。

√sh.app> (読み込み済み)
2013-02-18 18:04:35.196 PictureEnglish[5529:207] *** キャッチされていない例外 'NSRangeException' が原因でアプリを終了しています。理由: '*** -[NSCFString substringFromIndex:]: 範囲またはインデックスが範囲外です'
*** 最初のスロー時のコール スタック:
(
    0 CoreFoundation 0x012775a9 __exceptionPreprocess + 185
    1 libobjc.A.dylib 0x013cb313 objc_exception_throw + 44
    2 CoreFoundation 0x0122fef8 +[NSException raise:format:arguments:] + 136
    3 CoreFoundation 0x0122fe6a +​​[NSException raise:format:] + 58
    4 Foundation 0x00033086 -[NSString substringFromIndex:] + 133
    5 PictureEnglish 0x00008524 -[SelectCategoryViewController viewDidLoad] + 937
    6 UIKit 0x00378089 - [UIViewController ビュー] + 179
    7 UIKit 0x00376482 -[UIViewController contentScrollView] + 42
    8 UIKit 0x00386f25 -[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:] + 48
    9 UIKit 0x00385555 -[UINavigationController _layoutViewController:] + 43
    10 UIKit 0x00386870 -[UINavigationController _startTransition:fromViewController:toViewController:] + 524
    11 UIKit 0x0038132a -[UINavigationController _startDeferredTransitionIfNeeded] + 266
    12 UIKit 0x0049c2e9 - [UILayoutContainerView layoutSubviews] + 226
    13 QuartzCore 0x010a7a5a - [CALayer layoutSublayers] + 181
    14 QuartzCore 0x010a9ddc CALayerLayoutIfNeeded + 220
    15 QuartzCore 0x0104f0b4 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310
    16 QuartzCore 0x01050294 _ZN2CA11Transaction6commitEv + 292
    17 UIKit 0x002ca9c9 - [UIApplication _reportAppLaunchFinished] + 39
    18 UIKit 0x002cae83 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 690
    19 UIKit 0x002d5617 -[UIApplication handleEvent:withNewEvent:] + 1533
    20 UIKit 0x002cdabf -[UIApplication sendEvent:] + 71
    21 UIKit 0x002d2f2e _UIApplicationHandleEvent + 7576
    22 GraphicsServices 0x01bcf992 PurpleEventCallback + 1550
    23 CoreFoundation 0x01258944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    24 CoreFoundation 0x011b8cf7 __CFRunLoopDoSource1 + 215
    25 CoreFoundation 0x011b5f83 __CFRunLoopRun + 979
    26 CoreFoundation 0x011b5840 CFRunLoopRunSpecific + 208
    27 CoreFoundation 0x011b5761 CFRunLoopRunInMode + 97
    28 UIKit 0x002ca7d2 -[UIApplication_run] + 623
    29 UIKit 0x002d6c93 UIApplicationMain + 1160
    30 PictureEnglish 0x00001cec メイン + 102
    31 PictureEnglish 0x00001c7d start + 53
    32??? 0x00000001 0x0 + 1
)
「NSException」のインスタンスをスローした後に呼び出される終了

選択した言語の SelectCategoryViewController を呼び出す方法について何か提案はありますか?

4

3 に答える 3

0

この行は私には間違っているように見えます:

NSBundle *myLocalizedBundle=[NSBundle bundleWithPath:[NSString stringWithFormat:[[NSBundle mainBundle]bundlePath],"en.lproj"]];

あなたはおそらくこのようなことを意味しました:

NSString* path= [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
NSBundle* bundle:myLocalizedBundle = [NSBundle bundleWithPath:path];
SelectCategoryViewController *viewTwo = [[SelectCategoryViewController alloc] initWithNibName:@"SelectCategoryViewController" bundle:myLocalizedBundle];

これについては、こちらで詳しく説明します。iOSに別のローカライズされたペン先を手動でロードする

これは、アプリ内言語選択を行う場合にのみ必要であることに注意してください。ローカリゼーションでは通常、iOSデバイスで選択された言語を使用する必要があります。この場合、これはすべてはるかに簡単です(iOSにバンドルを選択させるだけです)。

于 2013-02-19T15:59:47.390 に答える
0

xcode 5: ビルドを消去し、ビルド フォルダーを消去し、派生データを削除し、シミュレーターをリセットし、シミュレーターを閉じ、Xcode を閉じる必要がありました。

プロジェクトを再度開くと、機能しています。

于 2013-09-24T15:01:14.617 に答える
0

問題 - これはプロジェクト パスの問題です。[self.window makeWindowKeyVisible] は、最初に割り当てられたコントローラーへのパスを見つけることができないと思います...心配です-プロジェクトを他のパスに移動するか、実際にプロジェクトが存在するフォルダーの名前を変更するだけで、正常に動作し始めます....

それは私のためにうまくいきます...

于 2013-12-27T12:20:39.170 に答える