Iphone 无法加载从标识符为“0”的捆绑包中的nib引用的图像;(无效)“;

Iphone 无法加载从标识符为“0”的捆绑包中的nib引用的图像;(无效)“;,iphone,ios,ios4,localization,ios5,Iphone,Ios,Ios4,Localization,Ios5,我有一个应用程序,允许该用户在运行时从应用程序切换语言,一切正常,但当切换到另一种语言时,加载该语言的本地化Xib,但该Xib中没有任何图像。下面是我用于切换到另一种语言的代码 NSString* str = [[[NSUserDefaults standardUserDefaults]valueForKey:@"AppleLanguages"] objectAtIndex:0]; NSBundle* bnd = [NSBundle bundleWithPath:[[NSBund

我有一个应用程序,允许该用户在运行时从应用程序切换语言,一切正常,但当切换到另一种语言时,加载该语言的本地化Xib,但该Xib中没有任何图像。下面是我用于切换到另一种语言的代码

 NSString* str = [[[NSUserDefaults standardUserDefaults]valueForKey:@"AppleLanguages"]      objectAtIndex:0]; 
 NSBundle* bnd = [NSBundle bundleWithPath:[[NSBundle mainBundle]pathForResource:str ofType:@"lproj" ]];



HomeViewController *homeVC = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:bnd];
UINavigationController *localNavigationController = [[UINavigationController alloc] initWithRootViewController:homeVC];
localNavigationController.viewControllers = [NSMutableArray arrayWithObject:homeVC];
localNavigationController.navigationBarHidden = YES;

NSMutableArray *navs = [NSMutableArray arrayWithObject: localNavigationController];

tabBarController.viewControllers = navs;

self.window.rootViewController = tabBarController;
下面是Xcode调试中出现的错误

Could not load the "sahdow.png" image referenced from a nib in the bundle with identifier "(null)" 

我很高兴能帮助我解决这个问题,这需要我花很多时间。

你加载笔尖的方式是错误的,这将迫使你将图像“sahdow.png”本地化。事实上,如果您将图像本地化,您将看到错误消失-但我仍然会避免此路径

iOS自动处理其设置中的语言更改,并加载适当的本地化XIB(如果有)我建议您避免在代码中显式加载本地化的XIB,而是将其留给iOS,通过以下方式实例化视图控制器:

HomeViewController *homeVC = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
注意:对于我的答案,我假设“sahdow.png”在nib文件中被有意引用。如果不是这样,请在nib文件中查找此图像的引用并将其删除


PS:我刚刚发现,在其中提到了用于加载本地化nib的解决方案,以及它的副作用,例如要求所有相关图像也进行本地化。

正确的解决方案是仅对所有图像进行本地化强制对所有图像进行本地化是没有意义的(事实上,每次添加新语言时,本地化所有图像都会使构建的大小成倍增加)。最好的解决方案是只本地化您需要的内容。按照我上面发布的说明,您可以做到这一点。nib是本地化的,因此您可以选择加载到其中的图像。