NSBundle mainBundle 返回 nil

Posted

技术标签:

【中文标题】NSBundle mainBundle 返回 nil【英文标题】:NSBundle mainBundle returning nil 【发布时间】:2018-05-18 20:51:19 【问题描述】:

我正在尝试根据 Xcode 中的构建配置为我们的 ios 应用更改服务器设置。我使用this guide 作为基础。我在 Info.plist 中设置了配置属性,但是当我尝试在代码中获取它时,它会返回 nil

在寻找解决方案和测试的过程中,我发现 nil 从与 mainBundle 相关的所有事情中恢复过来。到目前为止,这是我在测试中声明的内容。我错过了什么/做错了什么?

NSBundle *bundle = [NSBundle mainBundle];
NSString *configuration = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"Configuration"];
NSString *bundleName = [[NSBundle mainBundle] bundleIdentifier];
NSString *otherName = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleNameKey];

我使用的是 Xcode 9.3。

【问题讨论】:

这是一个显而易见的问题:您是否检查了产品捆绑包中的 Info.plist 文件以确定是否为该键存储了值? 【参考方案1】:

在某些情况下,例如当您的代码直接从 Interface Builder 中执行时,mainBundle 不会返回对象。因此,根据您的上下文,您可能希望改用bundleForClass:。指定一个驻留在您想要的包中的类。

NSBundle *bundle = [NSBundle bundleForClass:[YourClass class]];

【讨论】:

更具体地说,当您尝试从不同的目标(例如静态库或 Swift 模块)调用 [NSBundle mainBundle] 时,可能会发生这种情况。【参考方案2】:

原来我从发布配置中复制了我的调试配置。我注意到一些调试属性不一样。所以我删除并重新创建了新配置。这解决了这个问题。如果有人详细说明为什么在发布版本中找不到捆绑信息,请发表评论。

【讨论】:

以上是关于NSBundle mainBundle 返回 nil的主要内容,如果未能解决你的问题,请参考以下文章

使用 OCUnit 进行单元测试时的 NSBundle 返回(空)

NSBundle 返回零

NSBundle.mainBundle() 返回 nil

NSBundle 返回 NULL

来自 NSBundle 路径的 NSURL 返回 nil

`NSBundle.mainBundle().URLForResource` 总是返回 `nil`