美文网首页
iOS fileExistsAtPath:函数返回结果错误

iOS fileExistsAtPath:函数返回结果错误

作者: whlpkk | 来源:发表于2018-12-29 18:33 被阅读12次

最近,项目中遇到了一个的问题,这里记录下来帮助遇到同样问题的同学。

项目背景:

写一个音乐的列表,点击下载音乐文件到沙盒,然后播放。可以收藏选中音乐。
为了收藏音乐,使用NSKeyedArchiver将音乐的数据模型MusicModel缓存到沙盒。MusicModel结构如下:


@interface MusicModel : NSObject <NSCopying>

@property (nonatomic ,strong) NSString       *musicID; //音乐id
@property (nonatomic ,strong) NSString       *title; //音乐标题
@property (nonatomic ,strong) NSString       *remoteUrl; //音乐文件下载地址
@property (nonatomic ,strong) NSURL          *resourceUrl; //下载音乐的沙盒目录地址

/* 
resourceUrl 大概样子如下:
file:///var/mobile/Containers/Data/Application/D186A9B5-FE94-424E-AFCF-6D79AEA71F3B/
Library/Application Support/VideoBackgroundMusic/5be3e94edb926.mp3
*/ 
@end

点击音乐的时候,使用[resourceUrl checkResourceIsReachableAndReturnError:nil]判断本地音乐是否已经下载,执行对应的逻辑。

遇到的问题:#####

这里我收藏了一首已经下载的歌曲,然后应用kill掉,重启app,点击收藏的歌曲,发现[resourceUrl checkResourceIsReachableAndReturnError:nil]返回的是NO,使用[[NSFileManager defaultManager] fileExistsAtPath: resourceUrl.path]一样返回NO。这里我明明已经下载成功了这首音乐,而且作者打开对应的沙盒目录,也发现了对应的文件,可是结果却一直是NO。怎么尝试都不行,一度怀疑人生...

答案:#####

这里错误的原因是,沙盒目录的前半段地址:file:///var/mobile/Containers/Data/Application/D186A9B5-FE94-424E-AFCF-6D79AEA71F3B/,是一个虚拟地址,每次启动的app的时候这个地址是会变化的(D186A9B5-FE94-424E-AFCF-6D79AEA71F3B)。

解决办法:#####

缓存resourceUrl时不能存储全部地址,而应该只是缓存后半部地址(VideoBackgroundMusic/5be3e94edb926.mp3),前面部分的地址,使用[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) objectAtIndex:0]获取,然后拼接即可。

相关文章

  • iOS fileExistsAtPath:函数返回结果错误

    最近,项目中遇到了一个的问题,这里记录下来帮助遇到同样问题的同学。 项目背景: 写一个音乐的列表,点击下载音乐文件...

  • 2019-02-08

    2019-02-0811.4 屏蔽函数公式返回的错误值IFERROR函数的作用是当公式的计算结果错误,则返回指定的...

  • V语言学习笔记-17错误处理

    错误定义 函数定义时,返回类型前面加?,表示这个函数可能返回一个错误 在函数代码中根据逻辑丢出错误:return ...

  • 廖雪峰 | 5.1 返回函数和匿名函数

    返回函数 1,实例1:可变参数求和(1)即时返回求和结果 (2)返回求和函数,调用该函数则得结果 在函数lazy_...

  • Excel技巧之IFERROR函数

    可以使用 IFERROR 函数捕获和处理公式中的错误。 如果公式的计算结果为错误值,则 IFERROR 返回您指定...

  • 一 -33 python (函数)函数的返回值

    函数的返回值 返回值** 是 函数给调用方提供的结果 在函数中使用 return 关键字可以返回结果 调用函数一方...

  • Visual Studio调试时,出现“触发一个断点” 解决方

    现象:往往出现这种错误的情况时,程序会有正确的结果,但 main 函数返回值 不是 0 ,或者说 不是正常 返回值...

  • 三 (八)错误和警告代码

    错误和警告代码 本节包含以下描述: 交易服务器返回代码//——分析OrderSend()函数发送的交易请求的结果;...

  • move_base goal 的actionlib服务

    引入 定义 等待服务 发送goal 发送后可以指定完成函数,激活函数和回调函数 等待 阻塞,直到返回结果 返回结果...

  • async/await 使用的注意事项

    在用async/await时,我遇到了一个错误: 错误代码如下: 而且返回test函数的处理结果是一个promis...

网友评论

      本文标题:iOS fileExistsAtPath:函数返回结果错误

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