2010-06-23 63 views
1

我想使用pathForResource,但它看起来不像它会创建路径(如果不存在的话)。所以我想通过执行以下操作手工创建一个:iPhone pathForRes vs bundlePath

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。虽然,我希望有一个更清洁的方式。

+0

构建之前或构建之前? – nduplessis 2010-06-23 22:26:29

+0

我不确定我是否理解你的问题。我需要访问构建之间的相同路径(在模拟器中测试程序时)。 – RyanJM 2010-06-24 03:12:46

+0

他很明显地动态创建它们,所以他需要在构建之后访问它们(即一旦程序正在运行,它没有事先知道该文件在包中),即使他用不同的方式说出它。 – iwasrobbed 2010-06-24 05:06:05

回答

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章,他会翻阅数据持久性(这是本示例的来源),那么您将省去很多麻烦。这是一本很棒的书。

+0

但是如果资源不存在,pathForResource返回nil。那么你如何为新资源创建路径? – RyanJM 2010-06-24 03:11:51

+0

查看更新的答案。 – iwasrobbed 2010-06-24 05:29:00

+0

感谢您的更新。我将不得不检查那本书。 – RyanJM 2010-06-24 21:14:31