当前位置: 代码迷 >> Iphone >> iphone simulator 资料路径
  详细解决方案

iphone simulator 资料路径

热度:216   发布时间:2016-04-25 06:29:15.0
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

}

?

?

这样就可以满足上面两种情况了。

  相关解决方案