NSBundle - (尚未加载)错误

6

我正在尝试获取一个字符串文件表,以便在 NSLocalizedStringFromTableInBundle 中使用。

我正在使用以下方法:

+(NSBundle*)getBundleForLang:(NSString*)lang{
     //get the path to the bundle
    NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"localizable" ofType:@"strings" inDirectory:nil forLocalization:lang];
    NSLog(@"bundlePath = %@",bundlePath);

    //load the bundle
    NSBundle *langBundle = [[NSBundle alloc] initWithPath:[bundlePath stringByDeletingLastPathComponent]];
    NSLog(@"langBundle = %@",langBundle);
    return langBundle;
}

虽然仿真器上表现良好,但当我尝试在 iPhone 设备上使用它时,会出现如下 NSLog:

2011-12-09 00:40:14.533 MyApp[12754:707] langBundle = NSBundle 
</var/mobile/Applications/915E6BCB-EC44-4F1D-891B-EF68E2FA89C2/MyApp.app/he.lproj> 
(not yet loaded)

为什么它没有加载,问题出在哪里呢?
谢谢,
Shani

3
你的文件应该叫做Localizable.strings而不是localizable.strings,请注意大小写。 - Lily Ballard
3个回答

6

检查您的文件路径的大小写。模拟器默认情况下不区分大小写,而设备是区分大小写的。这可能会导致模拟器成功找到文件,但设备无法找到。


那就是问题所在了。有趣的是,我把文件命名为“localizable”,所以大小写是匹配的。但似乎这里名称很重要。 - shannoga

1
这不是错误。字符串包(如en.lproj)不包含可执行文件。当您尝试[bundle loadAndReturnError:]时,它会失败,并且loadAndReturnError:文档将告诉您原因。

1

确保捆绑包含一个捆绑标识符。 如果没有,即使路径可用,资源也无法从那里加载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接