无法加载从包中的笔尖引用的图像

时间:2011-12-27 10:01:47

标签: iphone ios xcode

我有一个简单的应用程序,其中包含两个XIB,每个都使用“文件检查器”窗格中的“XCode添加本地化”功能进行本地化(对于两种语言en和ar用于阿拉伯语)。 我在根视图控制器xib中放置了两个按钮来切换应用程序语言并切换到另一个本地化的XIB,该应用程序运行正常,除了一个小问题:阿拉伯语XIB包含{{1内部的图像并且英语XIB在imageView

中包含一个图像

1)当我将语言从英语切换到阿拉伯语时,阿拉伯语XIB就位,但没有图像

2)当我从阿拉伯语切换到英语时反之亦然

3)甚至在应用启动时它都不会显示图像:  XCode在这三种情况下在Console中产生此错误,而不会导致应用程序崩溃:

imageView

2011-12-27 12:48:30.412 LangSwitch[4903:f803] Could not load the "image1.png" image referenced from a nib in the bundle with identifier "(null)"方法代码为:

didFinishLaunchingWithOptions

并且 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(lang:) name:@"Lang" object:nil]; // Override point for customization after application launch. // Set the navigation controller as the window's root view controller and display. NSString* str = [[[NSUserDefaults standardUserDefaults]valueForKey:@"AppleLanguages"] objectAtIndex:0]; NSBundle* bnd = [NSBundle bundleWithPath:[[NSBundle mainBundle]pathForResource:str ofType:@"lproj"]]; RootViewController* cont = [[RootViewController alloc]initWithNibName:@"RootViewController" bundle:bnd]; self.window.rootViewController = cont; [self.window makeKeyAndVisible]; 选择器代码为:

lang

here is the sample app包含我上面描述的内容。如果你们能帮助解决这个问题,我会非常感激你们。

提前非常感谢你......

5 个答案:

答案 0 :(得分:2)

问题是xib文件在其自己的本地包中搜索图像,但图像不存在,自然会出现错误。解决方案是:

  • 从xib文件中删除图像。这意味着您应该只有空的图像视图,没有背景图像的按钮.etc在您的xib文件上。

  • 使用助手窗口,将所有子视图连接到头文件并合成相关属性。

  • 在您的视图中执行加载方法,手动设置图像,如:

    [_logoImageView setImage:[UIImage imageNamed:@"logo.png"]];
    
    [_button1 setBackgroundImage:[UIImage imageNamed:@"buttonImage.png"] forState:UIControlStateNormal];
    

现在您的图像是从主包中加载的,但您的xib文件已本地化。编译器不会给出任何错误。

答案 1 :(得分:1)

Xib文件从主包中加载图像,而不是从自定义语言特定包中加载。

您无法以编程方式真正更改国际化应用的语言。用户可以更改手机设置中的语言但不能。如果要在应用程序中使用多种语言,请将所有图像资源放在主包中(无国际化)并设置自己的国际化方法(示例:rename pic.png到en-pic.png和ar-pic.png )

答案 2 :(得分:1)

我不认为这可以按照您的方式完成,即便如此,您使用的API也会让您的应用从App Store中退出 - Changing language on the fly, in running iOS, programmatically

但您可以尝试本地化图像(通过属性检查员完成)。

而不是尝试通过更改本地化来加载不同的笔尖 - 您将不得不手动更改笔尖。不必将相同的nib文件本地化,您必须创建两个nib文件,并根据用户的选择加载特定于语言的文件 - 您还负责自己加载所有语言本地化资源,这不是一项小任务

语言选择确实最好是在用户的设备层面上完成,而不是通过尝试强制进行本地化更改来实现 - 正如我所说的那样,Apple不鼓励这样做。

答案 3 :(得分:0)

检查图像“image1.png”是否已添加到项目中。

同时验证是否在代码中定义了IBOutlet并将其链接到图像。

答案 4 :(得分:0)

我只是在xml模式下浏览XIB并添加了相对文件夹路径。对于前者我将图像保存在img文件夹中,图像名称为test.png。现在我进入xml模式并将test.png更改为img / test.png

它对我有用!

罗希特夏尔