Iphone 检查捆绑包中是否存在文件

Iphone 检查捆绑包中是否存在文件,iphone,cocoa-touch,ios,nsbundle,Iphone,Cocoa Touch,Ios,Nsbundle,在获取文件之前,我们如何检查应用程序中加载的外部捆绑包中是否存在文件?如果您只想知道文件是否存在,以便决定是否加载,我将尝试加载文件并检查返回的对象是否为零。如果是,您知道它不存在于捆绑包中。要检查捆绑包中是否存在文件,请使用NSBundle类 NSString *path = [[NSBundle mainBundle] pathForResource:@"somefileinbundle"

在获取文件之前,我们如何检查应用程序中加载的外部捆绑包中是否存在文件?

如果您只想知道文件是否存在,以便决定是否加载,我将尝试加载文件并检查返回的对象是否为零。如果是,您知道它不存在于捆绑包中。

要检查捆绑包中是否存在文件,请使用
NSBundle

NSString *path = [[NSBundle mainBundle] 
                            pathForResource:@"somefileinbundle" 
                            ofType:@"png"];
if (!path)
   NSLog(@"Unable to find file in bundle");
尽管如此,在加载文件之前先检查文件是否存在通常是一个坏主意。根据
NSFileManager fileExistsAtPath:

不建议尝试根据文件系统的当前状态或文件系统上的特定文件来判断行为。在文件系统争用情况下,这样做可能会导致异常行为尝试一项操作(如加载文件或创建目录)、检查错误并优雅地处理任何错误,要比提前判断操作是否会成功要好得多。有关文件系统争用条件的更多信息,请参阅《安全编码指南》中的“避免竞争条件和不安全的文件操作”


请记住,对于iOS应用程序,不能有多个捆绑包。因此,没有“外部捆绑包”,只有主捆绑包。您对
pathForResource:ofType
的使用对我来说似乎有点奇怪-为什么要手动附加该类型?我建议改为使用:
NSString*path=[[NSBundle mainBundle]pathForResource:@类型为@“png”的“somefileinbundle”
这真的没什么区别——任何一种方法都是一样的。我开始使用我的方法,因为我经常在项目的中途更改资源类型,例如从png更改为jpg,这取决于哪个更适合图像的类型。只需搜索并替换整个文件名,而不必搜索g的名称,替换它,然后手动替换扩展。这不是一个大问题,但在几个项目中这是一个麻烦。