zoukankan      html  css  js  c++  java
  • iOS沙盒路径变化的说明详解

    最近用沙盒存储文件的时候发现了一个奇怪的现象,由于业务需要,我会将保存的文件绝对路径保存以便下次读取。

    于是发现一个找不到的现象,即上一次保存下的绝对路径,再第二次打开app去查找的时候,发现找不到。。。

    比如:

    我第一次保存一个文件,保存路径如下:

    /Users/MACBOOK/Library/Developer/CoreSimulator/Devices/42B54721-B3EB-448A-A450-1E11165011A0/data/Containers/Data/Application/5CBBF509-BD9B-4AA9-AA19-A04FC5C791E6/Documents/Picture/11/20160818115808

    然后将这个路径保存到一个地方,下次根据这个路径去取文件,然后就回出现我如上描述的问题。

     

    原因如下:

    iOS8之后,苹果添加的新特性,将每次打开app内的沙盒[唯一编码路径](红框部分)重新生成,并保持上一次的沙盒文件(Documents、Library、tmp)移到新生成的文件内,旧文件删除,就是说,你保存的文件都在,只不过每次打开后,都会有一个新的绝对路径。

     


    因此,以后存取文件,就要避免我之前的做法,不用记录绝对路径,那么该如何做呢?

     

    其实很简单:保证每次使用类似 NSSearchPathForDirectoriesInDomains  方法去获取Documents文件路径,因为这样获取到到沙盒文件总是你一直使用的那个,里面的文件内容都会一直存在。

    如下:

        NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectoryNSUserDomainMaskYESfirstObject];

    或 

        NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

     

     

    这样保证没次取路径,都是最新的路径,而避免了用绝对路径带来的错误。

     

    最后记住:下次千万不要记录绝对路径。

     

     

    全文结束。

  • 相关阅读:
    C++ 面向对象高级开发 -- static
    C++ 面向对象高级开发 -- complex 类的实现
    单独编译PCL的kdtree模块报错“undefined reference to”
    【C++】预处理指令#define,#ifdef,#ifndef,#endif ...
    点云配准(Registration)算法——以PCL为例
    算法岗求职资料汇总
    C++面向对象高级开发
    opencv的常用头文件
    ubuntu下,VSCode采用cmake编译C++工程
    "error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
  • 原文地址:https://www.cnblogs.com/huayuan320/p/6306992.html
Copyright © 2011-2022 走看看