NSBundle pathForResource:ofType: 偶尔会为一个资源返回 nil

Posted

技术标签:

【中文标题】NSBundle pathForResource:ofType: 偶尔会为一个资源返回 nil【英文标题】:NSBundle pathForResource:ofType: occasionally returns nil for one resource 【发布时间】:2012-10-28 21:02:59 【问题描述】:

通常当尝试通过[[NSBundle mainBundle] pathForResource:@"iphone" ofType:@"splang"] 在我的应用程序中加载特定资源时,它工作正常,但每隔一段时间就会返回 nil。有问题的 iphone.splang 文件是一个约 275 KB 的文本文件,它肯定与应用程序捆绑在一起(通常可以加载)。

我已验证返回 nil 的是 pathForResource:ofType:,而不是 mainBundle 方法。

【问题讨论】:

发生此故障时是否有任何内容写入控制台? 您是否 100% 肯定它是区分大小写的,命名方式与文件完全相同? @user1118321 写入控制台的唯一相关内容是来自我因 pathForResource 返回 nil 而引发的异常的日志消息。 @snb im 假设您已经完成了构建清理等操作? 嘿@snb,您在找到此问题的根源方面取得了任何进展吗?我也在经历。 【参考方案1】:

这可能是国际化的问题。 根据the documentation,pathForResource 仅在找不到文件时返回 nil。但它也说:

该方法首先在指定包的非本地化资源目录中查找匹配的资源文件。 [...] 如果找不到匹配的资源文件,它会在任何可用的特定语言“.lproj”目录的顶层查找。 (特定语言目录的搜索顺序与用户的偏好相对应。)它不会在这些位置的任何其他子目录中递归。

也许您正在使用不同语言的不同机器或模拟器上尝试您的代码。

此外,[NSBundle mainbundle] 可以返回 nil,因此对其执行任何调用也将返回 nil。

[...] 请务必检查返回值以确保您拥有有效的捆绑包。

【讨论】:

我明确检查了[NSBundle mainbundle] 的返回值,还没有看到它返回nil,所以我不认为是这样。我也不认为这是特定于语言的目录的问题,因为有问题的文件位于非本地化资源目录中。 pathForResource 有时只是在同一设备上返回 nil,而不对语言设置进行任何更改。 pathForResource在应用启动时被调用,最终可以通过强制退出并反复重启应用来触发问题。

以上是关于NSBundle pathForResource:ofType: 偶尔会为一个资源返回 nil的主要内容,如果未能解决你的问题,请参考以下文章

NSBundle pathForResource is NULL 取不到值

使用 [NSBundle mainBundle] pathForResource: ofType:inDirectory: 访问文件

NSBundle pathForResource 返回 nil 和子目录

iOS:[NSBundle pathForResource:ofType:inDirectory] ​​返回 nil?

使用 [[NSBundle mainBundle] pathForResource 获取 .plist 的路径时出现问题

NSBundle pathForResource 不适用于子目录本地化?