iOS Objective-C图像文件名称/path在模拟器和设备之间的不同行为

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

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

获得图像的path。

我发现在设备(iPod Touch)上运行时,名称区分大小写,所以如果文件是“Auto”,并使用“AUTO”,返回的poath是“file://(null)”。 但是在模拟器上,如果我使用“自动”,它和我使用“自动”一样。

我在想,模拟器在设备行为上有如此明显的差异,这是一个错误。 那些更有经验的用户是否认为这是事实,我应该向苹果公司报告?

谢谢。

我在想,模拟器在设备行为上有如此明显的差异,这是一个错误。

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

那些更有经验的用户是否认为这是事实,我应该向苹果公司报告?

是。 但是这个bug与设备完全没有关系。 具体而言,该错误只是“模拟器文件path不区分大小写”。 如果您可以在“沙盒”项目中重现此操作,请将其与您的错误报告一起提交。

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

你必须非常小心,我已经不止一次地用脚砸自己了。

这与NS / CFBundle本身有关,比底层文件系统还要多:

直接从Bundle编程指南:捆绑search模式 :

重要 :捆绑接口在捆绑目录中search资源文件时考虑大小写。 这种区分大小写的search甚至发生在文件系统(如HFS +)上,而文件名称不区分大小写。

你应该总是假设区分大小写。 那么,或许更好的expression方式就是说,永远不要假设不区分大小写的情况下保留(这是什么HFS +)。 在不远的将来,区分大小写的HFS +可能会成为Mac OS X的默认格式(一般来说,它比现有的保存HFS +更受欢迎,但是如果现在苹果要切换它,可能会有成千上万的应用程序因为开发者做出了不应该有的假设而被打破,iPhone就是大小写敏感的HFS +的一个明显例子,没有遗留的程序可以担心,iPhone一直是区分大小写)。

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