我正在创建我的第一个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> (loaded) 2013-02-18 18:04:35.196 PictureEnglish[5529:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFString substringFromIndex:]: Range or index out of bounds' *** Call stack at first throw: ( 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 view] + 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 main + 102 31 PictureEnglish 0x00001c7d start + 53 32 ??? 0x00000001 0x0 + 1 ) terminate called after throwing an instance of 'NSException'
关于如何为所选语言调用SelectCategoryViewController的任何建议?
答案 0 :(得分: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];
这里将对此进行更多讨论:Manually loading a different localized nib in iOs
请注意,仅当您要进行应用内语言选择时才需要这样做。本地化通常应使用iOS设备选择的语言,在这种情况下,所有这些都更直接(您只需让iOS为您选择捆绑包)。
答案 1 :(得分:0)
xcode 5: 我不得不清理构建,清理构建文件夹,删除派生数据,重置模拟器,关闭模拟器,关闭Xcode。
再次打开项目,它正在运行。
答案 2 :(得分:0)
问题 - 这是项目路径的问题,我认为[self.window makeWindowKeyVisible]无法找到第一个指定控制器的路径... 解决方案 - 当项目突然停止工作时,它会发生一段时间,所以不用担心 - 只需将项目转移到其他路径,或者只是更改项目所在的文件夹名称,它将开始正常工作....
它对我有效...