【问题标题】:NSBundle pathForResource:ofType: occasionally returns nil for one resourceNSBundle pathForResource:ofType: 偶尔会为一个资源返回 nil
【发布时间】: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,您在找到此问题的根源方面取得了任何进展吗?我也在经历。

标签: iphone ios


【解决方案1】:

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

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

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

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

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

【讨论】:

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