iOS 路径设置(转)

一、绝对路径与相对路径1。

原文链接

iOS程序有固定的文件访问限制,只能在自己的沙盒内。
[objc] view plain copy
UIImage *img=[UIImage imageNamed:@"cellicon.png"];

这段代码从相对路径加载了一个png图片资源作为UIImage对象,没有任何问题。因为它在内部已经偷偷得帮你把路径转化为相对路径了,你还不知道吧!
接下来,如果要加载一些自定义格式的文件或者数据,就会出现相对路径和绝对路径的问题。比如
[objc] view plain copy
//newPath为一个字符串路径,这里的路径你却不能像上面那样
NSFileHandle *fileHandle=[NSFileHandle fileHandleForReadingAtPath:newPath];

[objc] view plain copy
//这样系统是找不到文件的,因为这里需要的是文件的绝对路径,而@“test.txt”完全是无效的。
NSFileHandle *fileHandle=[NSFileHandle fileHandleForReadingAtPath:@"test.txt"];
这个时候就需要NSBundle的帮忙了,这个类专门用来负责路径转化等等功能。大家都知道ios项目虽然在xcode下可以创建文件夹结构,但是实际上它是没有文件结构概念的,所以此时假如要加载放在项目目录下的test.txt文件,完整的代码应该是这样

[objc] view plain copy
//方法1:
NSString *newPath=[NSString stringWithFormat:@"%@%@%@",[[NSBundlemainBundle]resourcePath],@"/",path];
NSLog(@"url=%@",newPath);
NSFileHandle *fileHandle=[NSFileHandle fileHandleForReadingAtPath:newPath];
此处[NSBundle mainBundle]是获得NSBundle的一个单例对象,此单例对象 已经设置了默认的resourcePath,也就是你的app打包后的路径,[NSBundle mainBundle] resourcePath]就是获得这个完整的打包后的app路径,但你的test.txt文件并不在这个目录,而是在app内部,这时就需要拼接路径字符串,[NSString stringWithFormat:@"%@%@%@",[[NSBundle mainBundle] resourcePath],@"/",path];
控制台输出app路径resourcePath:
/Users/zouzouyanghong/Library/Application Support/iPhone Simulator/5.0/Applications/76116A6A-572D-43AE-AE78-17D7A88DCAFC/JFitnessProduct.app
控制台输出拼接后完整文件绝对路径:
/Users/zouzouyanghong/Library/Application Support/iPhone Simulator/5.0/Applications/76116A6A-572D-43AE-AE78-17D7A88DCAFC/JFitnessProduct.app/test.jat
[objc] view plain copy
//方法2:
NSString *newPath=[[NSBundle mainBundle] pathForResource:@"test" ofType:@"txt"];
NSFileHandle *fileHandle=[NSFileHandle fileHandleForReadingAtPath:newPath];
[[NSBundle mainBundle] pathForResource:@"test" ofType:@"jat"];pathForResource方法有两个参数,前面这个为文件名,后面那个ofType就是文件类型,也就是文件后缀。这里把文件名和后缀分开了,如果这时你得到的是一个完整的文件名如:@“test.txt”,那么你得自己想办法把文件名和后缀分开。要特别说明,此处的文件后缀是不需要“.”的,如果写成@“.jat”是错误的,加载文件会失败。

二、绝对路径与相对路径2

另外一处我们用到绝对路径与相对路径的地方就是我们在xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,如果只是自己用这个项目,用绝对路径的问题不大。
如果你把工程发给别人,别人就要修改这个绝对路径,这时候绝对路径的缺点立马出现。

1、所以在修改 Header Search Paths这个选项的时候使用
"$(SRCROOT)/当前工程名字/需要包含头文件所在文件夹"
将上面的双引号里面的字符串拷贝之后,你会发现这个“$(SRCROOT)”,会自动变成当前工程所在的文件夹。
这样就可以了,发给别人,别人也不用在去修改路径了。

2、设置PCH的相对路径
绝对路径:

要想设置PCH的相对路径,首先我们需要去查看绝对路径。

点击PCH文件,Xcode的右侧会显示PCH的属性。这里我们可以获取到PCH的绝对路径。

设置相对路径:

从工程的路径开始,前面使用$(SRCROOT)代替,即为PCH的相对路径。

在Xcode的target配置中,在Build Setting中找到Prefix Header,将修改后得到的相对路径添加到其中,并将Precompile Prefix Header的值设置为YES。

运行工程,PCH相对路径设置成功。

三、使用相对工程名

你有可能会在填Prefix Header 即pch文件的路径那里报错,最近又学习到一种更好的方式:

$(SRCROOT)/$(PROJECT_NAME)/PrefixHeader.pch,

其中$(PROJECT_NAME)是相对工程名,比上面的方法更便捷.

posted @ 2017-07-20 11:50  上水的花  阅读(701)  评论(0编辑  收藏  举报