现有路径的NSBundle尚未加载

5

我正试图实现在应用程序内更改语言的方法。

我认为我已经想出了所有的细节,但由于某些原因,文件夹没有作为一个捆绑包加载。

我有一个名为kh.lproj的文件夹。

  NSString *path = [[NSBundle mainBundle] pathForResource:newLanguage ofType:@"lproj"];

  if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
    bundle = [NSBundle bundleWithPath:path];
    DLOG(@"Language: %@ from path %@ (%@)", newLanguage, path, bundle);
  }

我的dlog输出结果是:
语言:kh,路径为......../F1AA1E74-A014-4331-BD1B-D05D0E54AFF3/console.app/kh.lproj(NSBundle<......./F1AA1E74-A014-4331-BD1B-D05D0E54AFF3/console.app/kh.lproj>(尚未加载))
在iPhone和模拟器上都是如此(当然路径不同)。
我已经检查了.app文件夹,kh.lproj文件夹在那里(小写字母)。
有人知道这是为什么吗?如果我尝试加载不存在的文件,它只会忽略它并且不会尝试加载它。
编辑
如果有帮助的话,当我使用loadAndReturnError:(NSError)时,我收到以下消息:
NSLocalizedFailureReason=无法找到包的可执行文件。, NSLocalizedDescription=无法加载“kh.lproj”包,因为无法找到其可执行文件。, NSBundlePath=......./A65E8399-6CDB-4CAE-9074-803125E78BBA/storeconsole.app/kh.lproj
这个错误消息是什么意思?

你是否检查过是否标记了正确的目标?有时添加资源不会自动检查目标。 - iOS
是的,它在“复制捆绑资源”构建阶段中。正如上面提到的那样,它在编译后我得到的.app文件夹中,所以它肯定在那里。 - Erik
抱歉,我目前还没有头绪。 - iOS
我认为加载只对使用捆绑包的可执行代码有影响。如果你只是使用资源,那么你不需要担心它。https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/LoadingCode/Tasks/LoadingBundles.html - James
我遇到了同样的问题。我想使用自己框架束中的xib,该框架束不包含可执行代码,但仍然无法正常工作。不明白问题出在哪里。 - zedzhao
2个回答

0

看起来当我调用时,我总是得到我想要的东西

[bundle localizedStringForKey:key value:NULL table:nil];

以上代码始终加载英语或您的移动语言。 - Alok
什么是关键输入? - zedzhao

0
一个可能的陷阱是,当字符串文件存在错误时,比如缺少分号或不完整的注释标记。
Xcode不会检查文件的语法错误。

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