美文网首页
iOS8沙盒路径的坑

iOS8沙盒路径的坑

作者: Color_Six | 来源:发表于2017-06-24 22:28 被阅读12次

1.背景描述:

最近项目中在做下载网络视频到本地的功能,下载完成后App存储下载好的视频路径。我是通过保存完整的路径,就发现个很奇怪的现象:每次刚下载完成后,可以播放视频,但是当重新Run之后,无论模拟器还是真机运行播放上次下载好的视频,总会播放失败,提示No such File。刚开始以为是下载类中做了路径处理的功能,导致在下载完成后更换了新的路径。经过多次的碰壁,最近发现每次Run之后,之前保存的路径已经不存在,所以造成视频播放失败的原因。

那到底是什么原因呢?该怎样获取到上次保存的路径呢?

2.那到底是什么原因造成路径更换呢?

通过网上的搜索,参考该作者的回答,表示感谢该作者,以及自己的测试。在iOS 8之前,我们获取到的沙盒中的Document、cache、tmp等路径,再次运行后通过上次获取的绝对路径还能找到。但是在iOS 8之后,由于苹果考虑到安全因素,沙盒路径都是在动态改变。

3.该怎样获取上次保存的文件路径呢?

虽然每次Run的路径不同,但是文件会从上一次的路径中自动转移到新的路径中。比如上一次存储了一个名为av.mp4的视频文件,其路径为/Users/XXX/Library/Developer/CoreSimulator/Devices/2B080463-1234-33BE-AB23-B87634765473/Library/Documents/av.mp4,则再次运行后文件会转存到新的路径/Users/XXX/Library/Developer/CoreSimulator/Devices/34DC0863-1334-67EC-AB23-B87634765473/Library/Documents/av.mp4。因此我们不能通过绝对路径来获取,而是通过文件名来获取文件所在的动态路径。

代码如下:

+(NSString*)getDynamicFilePath:(NSString*)fileName{

NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString*documents=[pathsobjectAtIndex:0];

NSString*filePath=[NSStringstringWithFormat:@"%@%@",documents,fileName];

returnfilePath;

}

这样就能保证每次都能获取到文件的路径啦!

相关文章

  • iOS8沙盒路径的坑

    1.背景描述: 最近项目中在做下载网络视频到本地的功能,下载完成后App存储下载好的视频路径。我是通过保存完整的路...

  • iOS 8.0 访问沙盒目录

    iOS8之前访问沙盒的路径,通过NSHomedictionary()获取的家路径 /Users/xxxx/Libr...

  • IOS沙盒 - OC

    沙盒: 沙盒包含: 沙盒路径获取的方法:

  • cell 图片缓存策略

    无沙盒路径缓存策略 有沙盒路径缓存策略

  • App 沙盒

    从 iOS8 以后,每次App重新运行后,沙盒路径都会变化。 Documents 目录 保存应用运行时生成的需要持...

  • 文件操作

    1. 沙盒路径的处理 沙盒路径:NSString *homePath = NSHomeDirectory() Do...

  • 07-06(如何找到沙盒里面的文件)

    NSLog(@"沙盒路径是%@", NSHomeDirectory());//打印出沙盒路径.然后:Finder-...

  • 沙盒机制

    沙盒(sandbox) 1.沙盒含义:每个应用程序都有一个沙盒,只能在自己沙盒中存取资源,在iOS8以后放开某些文...

  • 沙盒

    沙盒(sandbox) 1.沙盒含义:每个应用程序都有一个沙盒,只能在自己沙盒中存取资源,在iOS8以后放开某些文...

  • 沙盒

    1、沙盒 程序只能访问自己的沙盒 NSHomeDirectory() 访问沙盒路径 沙盒下有三个目录:Docume...

网友评论

      本文标题:iOS8沙盒路径的坑

      本文链接:https://www.haomeiwen.com/subject/gqqlcxtx.html