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的主要内容,如果未能解决你的问题,请参考以下文章