• Library路径下每次Run都会改变


    问题:在 Xcode 中每次 Run, Library 目录就会改变,就像重新安装了一个 APP 一样?

    // 获取 Library 路径
    NSString *filepath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
        NSLog(@"filePath:%@", filepath);
    
    // 第一次 run ,Library路径
    /Users/renwei/Library/Developer/CoreSimulator/Devices/B1D7EC3E-BE72-4F8D-A4EF-E3D6316827CF/data/Containers/Data/Application/C7E1C3B7-BEC8-4133-A236-8DB0BC074160/Library/
    // 第二次 run ,Library路径
    /Users/renwei/Library/Developer/CoreSimulator/Devices/B1D7EC3E-BE72-4F8D-A4EF-E3D6316827CF/data/Containers/Data/Application/1359ECFE-AFE6-4859-84F9-9539F8FF1866/Library/
    

    疑问:在之前,Xcode 每次运行项目时,Library 下的路径是一样的。而现在路径发生了改变,Library 里保存的数据就会丢失。

    答疑:苹果从安全方面考虑,每次运行会产生一个新的文件夹,会把上一个文件中的数据迁移到新的文件夹中,上一个路径会被苹果毫无保留的删除,只保留新的文件,所以,获取到沙盒路径后,一定不好存在本地或数据库,但并不影响开发和正常使用。

    解决方案:每次获取最新的沙盒路径,然后进行新路径的拼接,获取文件

    // 将以前的路径分解,取得自定义文件夹名,或者文件名,再重新拼路径
    NSArray *pathList = [databasePath componentsSeparatedByString:@"/"]; 
    // 获得新的沙盒路径
    NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirectory = [directoryPaths objectAtIndex:0];
    // 拼新的路径
    NSString *currentImagePath = [documentDirectory stringByAppendingPathComponent:FILE_NAME_ORIGINAL_IMAGE];
    currentImagePath = [currentImagePath stringByAppendingPathComponent:[pathList lastObject]];
    // 取得文件
    NSFileManager *manager = [NSFileManager defaultManager];
    if ([manager fileExistsAtPath:currentImagePath]) {
        NSData *fileData = [manager contentsAtPath:currentImagePath];
        return [UIImage imageWithData:fileData];
    }
    
  • 相关阅读:
    设计模式 : Template method 模板方法模式 -- 行为型
    设计模式:Strategy 策略模式 -- 行为型
    没有评审的技术都是扯淡
    TCP/IP 协议大致的概念
    HTTP 2.0 与 tomcat
    相对URL拼接为绝对URL的过程
    URI与URL区别
    《淘宝首页性能优化实践》文章阅读
    第一章 Linux内核简介
    vim中执行shell命令小结
  • 原文地址:https://www.cnblogs.com/r360/p/15994894.html
Copyright © 2020-2023  润新知