首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

IOS中相对地址与绝对地址的变换

2012-07-31 
IOS中相对地址与绝对地址的转换转自:/img/2012/06/24/1400397111?iOS程序有固定的文件访问限制,只能在自己

IOS中相对地址与绝对地址的转换

转自:uploadfile/jiaocheng/201401103/2821/2014012819211636440


?iOS程序有固定的文件访问限制,只能在自己的沙盒内。


? UIImage *img=[UIImage imageNamed:@"cellicon.png"];


??这段代码从相对路径加载了一个png图片资源作为UIImage对象,没有任何问题。因为它在内部已经偷偷得帮你把路径转化为相对路径了,你还不知道吧!

? 接下来,如果要加载一些自定义格式的文件或者数据,就会出现相对路径和绝对路径的问题。比如

? NSFileHandle?*fileHandle=[NSFileHandle?fileHandleForReadingAtPath:newPath];


? newPath为一个字符串路径,这里的路径你却不能像上面那样

? NSFileHandle?*fileHandle=[NSFileHandle?fileHandleForReadingAtPath:@"test.txt"];


? 这样系统是找不到文件的,因为这里需要的是文件的绝对路径,而@“test.txt”完全是无效的。

? 这个时候就需要NSBundle的帮忙了,这个类专门用来负责路径转化等等功能那。大家都知道ios项目虽然在xcode下可以创建文件夹结构,但是实际上它是没有文件结构概念的,所以此时假如要加载放在项目目录下的test.txt文件,完整的代码应该是这样


方法1:


? NSString?*newPath=[NSString?stringWithFormat:@"%@%@%@",[[NSBundle?mainBundle]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


方法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”是错误的,加载文件会失败。


话外题:有必要介绍一下打开指定路径得方法,先打开FinderIOS中相对地址与绝对地址的变换就是这个东西,上面菜单栏会出现Finder得相关菜单,选择“前往”->再选择这个IOS中相对地址与绝对地址的变换在弹出得窗口中输入得到得resourcePath路径,你就能看到自己得app了,你说怎么得到?自己想去。

?

热点排行