详解iPhone Simulator文件路径是本文要介绍的内容,iphone/ipod touch app 的开发使用了沙盒,即程序员能访问的一些文件要在自己程序的沙盒之内,一个应用程序的目录除了编译后的程序文件,通常还会有自己的document,tmp目录,可以通过调用api来获取这些路径,然后保存文件。
当使用xcode编译执行时,通常会启动一个iphone simulator来执行app,但是有个问题是,每次用simulator启动时,生成的app程序的根目录都是不同的。
这也意味着,如果你有一份存好数据的文件,要放到document或者tmp目录下,然后在应用程序里通过调用GetDocumentDirectory类似的api来读时,得到的都是不同的路径(如果不修改代码,不重新编译则不会),也就是说,你需要每次测试运行时,都要把你保存好的数据文件拷到本次程序运行目录的document下,这样调试起来非常麻烦。如何解决这个问题?
其实也很简单。。。用google大法就好了。沙盒技术是在跑真正的iphone/ipod touch上时的限制,当跑simulator时,其实可以从其它路径读取文件。
也就是说,你可以把文件放到一个你指定的其它地方,不需要放到app下的document下,这样当跑simulator时,app也可以读到非自己沙盒的目录下的文件。而当真正发布一个app时,也就是在iphone/ipod touch上运行时,则每次app的运行的根目录是固定的(不象跑simulator时会动态改变),这时再把数据文件放到真正的沙盒document或者tmp目录下就可以了。
为了综合这上面这两种情况,当以simulator的方式来跑的时候,会有一个
- TARGET_IPHONE_SIMULATOR
的宏,所以我们可以在获取文件时这么写:
- - (NSString *) dataFilePath {
- #if TARGET_IPHONE_SIMULATOR
- return @"/Users/fengbo/project/test/yourFileName";
- #else
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory
- , NSUserDomainMask, YES);
- NSString *documentsDirectory = [paths objectAtIndex:0];
- return [documentsDirectory stringByAppendingPathComponent:@"yourFileName"];
- #endif
- }
这样就可以满足上面两种情况了。
小结:详解iPhone Simulator文件路径的内容介绍完了,希望本文对你有所帮助!