【问题标题】:iOS Objective-C Image file name/path different behavior betwewen simulator and deviceiOS Objective-C 图像文件名/路径在模拟器和设备之间的不同行为
【发布时间】:2011-05-26 04:14:15
【问题描述】:

我有一个应用程序,其中应用程序包包含一个图像文件(我的意思是该文件被拖入 XCode 并出现在“其他来源”中),我正在使用如下代码:

[[NSBundle mainBundle] pathForResource:@"Auto" ofType:@"jpg"]

获取图像的路径。

我发现在设备(iPod Touch)上运行时,名称区分大小写,因此如果文件为“Auto”并且我使用“AUTO”,则返回的 poath 为“file://(null )”。但是在模拟器上,如果我使用“AUTO”,它的工作方式与使用“Auto”相同。

我认为模拟器与设备的行为有如此明显差异的事实是一个错误。更有经验的用户是否认为它是,我应该向 Apple 报告?

谢谢。

【问题讨论】:

  • 确实如此。回顾您的旧问题并接受一些答案。如果你忘恩负义,没人愿意帮忙。

标签: objective-c image ios path


【解决方案1】:

我认为模拟器与设备的行为有如此明显差异这一事实是一个错误。

一般来说,这并不一定表示存在错误。

那里更有经验的用户是否认为它是,我应该向 Apple 报告?

是的。但是该错误与设备完全无关。具体来说,该错误只是“模拟器文件路径不区分大小写”。如果您可以在“沙盒”项目中重现此内容,请执行此操作,并将其与您的错误报告一起提交。

【讨论】:

  • 我意识到我发现的并不意味着设备中存在错误。我同意你关于错误是什么的说法。我将尝试创建一个简单的项目并报告它。应该不会太难。
【解决方案2】:

iOS 文件系统区分大小写,而模拟器使用的 OSX 文件系统则不区分大小写。

你必须非常小心这个,我不止一次用这个射中自己的脚。

【讨论】:

    【解决方案3】:

    这与 NS/CFBundle 本身有关,而不是与底层文件系统有关:

    直接来自Bundle Programming Guide: The Bundle Search Pattern

    重要:bundle 接口在搜索bundle 目录中的资源文件时会考虑大小写。这种区分大小写的搜索即使在文件名不区分大小写的文件系统(例如 HFS+)上也会发生。

    您应该始终、始终假设区分大小写。好吧,也许是一种更好的表达方式,也就是说,永远不要假设在保留大小写的同时不区分大小写(这就是 HFS+)。在不远的将来,区分大小写的 HFS+ 可能会成为 Mac OS X 的默认格式。(一般来说,它会比当前保留大小写的 HFS+ 更受欢迎,但如果苹果现在要切换它,就会有可能有成千上万的应用程序会因为开发人员做出他们不应该有的假设而崩溃。iPhone 是偏好区分大小写的 HFS+ 的一个明显例子。无需担心遗留程序,iPhone 一直是区分大小写)。

    您现在正在编辑代码和资源名称,因此请花时间确保它们匹配。

    【讨论】:

    • 我为此提交了 Apple 错误报告 8903105,认为这是模拟器中的错误。
    • Apple 的回应是,由于模拟器在 Mac OS 上运行,因此这是正确的行为。我想这将很难纠正......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多