iPhone pathForResource vs bundlePath

Posted

技术标签:

【中文标题】iPhone pathForResource vs bundlePath【英文标题】: 【发布时间】:2010-06-23 22:00:23 【问题描述】:

我想使用 pathForResource,但如果路径不存在,它看起来不会创建路径。因此,我尝试通过执行以下操作手动创建一个:

 NSString *path = [NSString stringWithFormat:@"%@/%@.plist",[[NSBundle mainBundle] bundlePath],@"myFileName"];

我正在动态创建文件,所以我需要在拥有Build and Run 应用程序后访问它们。但它将项目放在一个唯一的 id 文件夹中,因此路径如下:

/Users/RyanJM/Library/Application Support/iPhone Simulator/3.0/Applications/80986747-37FD-49F3-9BA8-41A42AF7A4CB/MyApp.app/myFileName.plist

但是每次我进行构建时,唯一的 id 都会改变。创建每次都能到达的路径的正确方法是什么(即使在模拟器中)?

谢谢。

更新:编辑了问题,希望对以后遇到它的人有所帮助。

更新:IWasRobbed 回答了创建路径 URL 的正确方法。但我能找到的最佳答案来自Brad Parks。不过,我确实希望有一种更清洁的方式。

【问题讨论】:

构建前还是构建后? 我不确定我是否理解你的问题。我需要在构建之间访问相同的路径(在模拟器中测试程序时)。 他显然是在动态创建它们,因此他需要在构建后访问它们(即,一旦程序运行,它事先不知道文件在包中),即使他的措辞不同。 IWasRobbed,感谢您将其改写为更清晰。 【参考方案1】:

按照您提出问题的方式,这是您在构建之前阅读捆绑中包含的 plist 的方式:

NSString *propertyListPath = [[NSBundle mainBundle] pathForResource:SomeString ofType:@"plist"];

如果您想访问每个应用程序所拥有的目录作为您在构建之后创建的文件的唯一存储区域,您可以使用以下命令:

#define kFilename   @”data.plist”

- (NSString *)dataFilePath  
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; 

return [documentsDirectory stringByAppendingPathComponent:kFilename];

然后你可以检查它并在这里做一些数据处理:

NSString *filePath = [self dataFilePath]; 

if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) 
// do something with data here

如果您购买/阅读 Beginning iPhone 3 Development 特别是第 11 章,他介绍了数据持久性(这就是这个例子的来源),那么您会为自己省去很多麻烦。这是一本好书。

【讨论】:

但是 pathForResource 如果资源不存在则返回 nil。那么如何为新资源创建路径呢? 感谢您的更新。我得去看看那本书。 它仍然为模拟器创建了一个独特的路径。知道为什么吗? 不确定它为什么在模拟器上这样做(可能与它使用的某些唯一键有关),但知道它在设备上提供了一致的路径

以上是关于iPhone pathForResource vs bundlePath的主要内容,如果未能解决你的问题,请参考以下文章

iPhone播放声音和振动问题

视频播放后 iPhone 强制定向

iphone 模拟器和设备包

在后台运行时响应的iPhone应用程序

在 iphone sdk 上播放 mp3?

保存文件在 iPhone 和模拟器上的行为不同