【发布时间】:2011-04-04 23:31:44
【问题描述】:
我们如何在获取文件之前检查文件是否存在于应用程序中加载的外部包中?
【问题讨论】:
-
请记住,iOS 应用程序不能有多个捆绑包。所以,没有“外部包”,只有主包。
标签: iphone cocoa-touch ios nsbundle
我们如何在获取文件之前检查文件是否存在于应用程序中加载的外部包中?
【问题讨论】:
标签: iphone cocoa-touch ios nsbundle
要检查包中是否存在文件,请使用NSBundle 类。
NSString *path = [[NSBundle mainBundle]
pathForResource:@"somefileinbundle"
ofType:@"png"];
if (!path)
NSLog(@"Unable to find file in bundle");
话虽如此,但在尝试加载文件之前先检查文件是否存在通常是个坏主意。根据NSFileManager fileExistsAtPath:上的苹果文档@
不建议尝试基于文件系统的当前状态或文件系统上的特定文件来判断行为。在文件系统竞争条件的情况下,这样做可能会导致奇怪的行为。 尝试操作(例如加载文件或创建目录)、检查错误并优雅地处理任何错误比尝试提前确定操作是否成功要好得多。 有关文件系统竞争条件的更多信息,请参阅安全编码指南中的“避免竞争条件和不安全的文件操作”
【讨论】:
pathForResource:ofType 的使用对我来说似乎有点奇怪——您为什么要手动附加类型?我建议改用这个:NSString *path = [[NSBundle mainBundle] pathForResource:@"somefileinbundle" ofType:@"png"];
如果您只想知道它是否存在以便决定是否加载它,我会尝试加载它并检查返回的对象是否为 nil。如果是,您知道它在捆绑包中不存在。
【讨论】: