现有路径的 NSBundle“尚未加载”

Posted

技术标签:

【中文标题】现有路径的 NSBundle“尚未加载”【英文标题】:NSBundle "not yet loaded" for existing path 【发布时间】:2012-10-28 10:03:14 【问题描述】:

我正在尝试实现一种更改应用程序内部语言的方法。

我想我已经弄明白了,但由于某种原因,该文件夹没有作为捆绑包装运

我有一个名为 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 <.......> (尚未加载))

在 iPhone 和模拟器中(当然路径不同)。

我已经检查了 .app 文件夹并且 kh.lproj 文件夹在那里。 (小写)。

有人知道为什么会这样吗?如果我尝试加载一个不存在的文件,它只会忽略它并且不要尝试加载它。

编辑

如果有任何帮助,当我使用 loadAndReturnError:(NSError) 时,我会收到消息:

NSLocalizedFailureReason=找不到捆绑包的可执行文件。, NSLocalizedDescription=无法加载包“kh.lproj” 因为找不到它的可执行文件。, NSBundlePath=......./A65E8399-6CDB-4CAE-9074-803125E78BBA/storeconsole.app/kh.lproj

这个错误信息是什么意思

【问题讨论】:

你检查它是否被标记为正确的目标?有时添加资源会导致无法自动检查目标。 是的,它处于复制捆绑资源构建阶段。而且如上所述,它在我编译后得到的.app文件夹中,所以它肯定在那里 对不起,那我目前还没有头绪。 我认为加载只对使用包的可执行代码很重要。如果您只使用资源,则无需担心。 developer.apple.com/library/mac/documentation/Cocoa/Conceptual/… 我遇到了同样的问题。我想使用自己的框架包中的 xib,它不包含可执行代码,但仍然无法正常工作。不明白是什么问题。 【参考方案1】:

看起来我在调用时得到了我想要的东西

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

【讨论】:

上面的代码总是加载英文或者你的手机语言。 按键输入是什么?【参考方案2】:

如果字符串文件有错误,例如缺少分号或不完整的注释标记,也可能存在缺陷。

Xcode 不检查文件的语法错误。

【讨论】:

以上是关于现有路径的 NSBundle“尚未加载”的主要内容,如果未能解决你的问题,请参考以下文章

localizable.strings !!!!捆绑(路径)尚未加载

从 NSBundle 获取零路径

从不是 mainBundle 的 NSBundle 获取文件路径

来自 NSBundle 路径的 NSURL 返回 nil

NSBundle

nsbundle 捆绑路径上的警告