无法加载从包中带有标识符“(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)”的笔尖引用的图像的主要内容,如果未能解决你的问题,请参考以下文章

无法加载从带有标识符的包中的笔尖引用的“”图像

Xcode 不从 CUIDatalog 加载图像

为啥清理项目后所有图像都失效了?

无法加载笔尖错误消息

Flutter web 无法从包中加载资产

奇怪的 loadNibNamed 行为