Iphone 无法加载从捆绑包中的nib引用的图像

Iphone 无法加载从捆绑包中的nib引用的图像,iphone,ios,xcode,Iphone,Ios,Xcode,我有一个简单的应用程序,它包含两个XIB,每一个都是使用文件检查器窗格中的XCode添加本地化功能本地化的(对于两种语言,阿拉伯语是en和ar)。。 我在根视图控制器xib中放置了两个按钮以切换应用程序语言并切换到另一个本地化的xib,该应用程序运行良好,除了一个小问题:阿拉伯语xib在imageView中包含图像,英语xib在imageView中包含图像 1) 当我将语言从英语转换为阿拉伯语时,阿拉伯语XIB已经就位,但没有图像 2) 反之亦然,当我从阿拉伯语转换为英语时 3) 即使在应用程序

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

1) 当我将语言从英语转换为阿拉伯语时,阿拉伯语XIB已经就位,但没有图像

2) 反之亦然,当我从阿拉伯语转换为英语时

3) 即使在应用程序启动时,它也不会显示图像: XCode在控制台中的这3种情况下会产生此错误,但不会使应用程序崩溃:

2011-12-27 12:48:30.412 LangSwitch[4903:f803]无法加载从具有标识符(null)的捆绑包中的nib引用的“image1.png”图像。

didfishlaunchingwithoptions
方法代码为:

     [[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
选择器代码为:

      - (void)lang:(NSNotification*)sender{
//NSLog(@"%@",[sender object]);
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:[sender object],nil] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults]synchronize];

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];
}
这就是我上面所描述的。如果你们能帮我解决这个问题,我将非常感谢你们


提前感谢您……

Xib文件从主捆绑包而不是自定义语言特定捆绑包加载图像


你不能通过编程来真正改变国际化应用程序的语言。用户可以更改其手机设置中的语言,但您不能。如果您想在应用程序中使用多种语言,请将所有图像资源放在主捆绑包中(无国际化),并设置您自己的国际化方法(示例:将pic.png重命名为en-pic.png和ar-pic.png)

Xib文件从主捆绑包而非自定义语言特定捆绑包加载图像

你不能通过编程来真正改变国际化应用程序的语言。用户可以更改其手机设置中的语言,但您不能。如果您想在应用程序中使用多种语言,请将所有图像资源放在主捆绑包中(无国际化),并设置您自己的国际化方法(示例:将pic.png重命名为en-pic.png和ar-pic.png)

检查是否将图像“image1.png”添加到您的项目中

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

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


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

我认为这无法通过您的方式实现,即使如此,您使用的API也会使您的应用程序从应用程序商店中反弹-

但是您可以尝试定位图像(通过属性检查器完成)

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


语言的选择实际上是由用户在设备层面上做得更好,而不是由你自己来尝试强制进行本地化更改,正如我所说的,苹果不鼓励这样做。

我认为你这样做是不可能的,即使这样,您使用的API将使您的应用程序从应用程序商店中反弹-

但是您可以尝试定位图像(通过属性检查器完成)

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


语言的选择实际上最好由用户在设备级别上完成,而不是由您自己来尝试强制进行本地化更改,正如我所说的,苹果不鼓励这样做。

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

这对我有用


rohit

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

这对我有用


rohit

问题是xib文件在其自己的本地包中查找图像,但是图像不在那里,因此您自然会得到一个错误。解决办法是:

  • 从xib文件中删除图像。这意味着您的xib文件上应该只有空的ImageView、没有背景图像的按钮等等

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

  • 在view Dod load方法中,手动设置图像,如下所示:

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

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

问题是xib文件在其自己的本地包中查找图像,但图像不在那里,因此您自然会得到一个错误。解决办法是:

  • 从xib文件中删除图像。这意味着您的xib文件上应该只有空的ImageView、没有背景图像的按钮等等

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

  • 在view Dod load方法中,手动设置图像,如下所示:

    [_logoImageView setImage:[UIImage imageNamed:@"logo.png"]];
    
    [_button1 setBackgroundImage:[UIImage imageNamed:@"buttonImage.png"] forState:UIControlStateNormal];
    
现在,您的图像已从mai加载