无法加载从包中带有标识符“(null)”的笔尖引用的图像
Posted
技术标签:
【中文标题】无法加载从包中带有标识符“(null)”的笔尖引用的图像【英文标题】:Could not load the image referenced from a nib in the bundle with identifier "(null)" 【发布时间】:2011-12-27 12:39:01 【问题描述】:我有一个应用程序使该用户能够在运行时从应用程序切换语言,一切正常,但是当切换到另一种语言负载时,加载该语言的本地化 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)"
我很高兴能帮助我解决这个需要我花费数小时的问题。
【问题讨论】:
【参考方案1】:您加载笔尖的方式是错误的,它会迫使您也将图像“sahdow.png”本地化。事实上,如果您对图像进行本地化,您会看到错误消失 - 但我仍然会避开这条路径。
ios 会自动处理其设置中的语言更改并加载适当的本地化 xib(如果有)。 我建议您避免在代码中显式加载本地化的 xib,而是将其留给 iOS,方法是通过以下方式实例化您的视图控制器:
HomeViewController *homeVC = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
注意:对于我的回答,我假设您的 nib 文件中以某种方式故意引用了“sahdow.png”。如果不是这种情况,请在您的 nib 文件中查找此图像的引用并将其删除。
PS:我刚刚找到 another post,其中提到了您用于加载本地化笔尖的解决方案,以及它的副作用 - 例如要求所有相关图像也可以本地化。
【讨论】:
正确的解决方案是只对所有图像进行本地化 强制本地化所有图像是没有意义的(事实上,每次添加新语言时,本地化所有图像都会成倍增加构建的大小)。最好的解决方案是仅本地化您需要的内容。按照我上面发布的指示,你可以做到这一点。笔尖已本地化,因此您可以选择将哪些图像加载到其中。以上是关于无法加载从包中带有标识符“(null)”的笔尖引用的图像的主要内容,如果未能解决你的问题,请参考以下文章