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 的路径时出现问题