问题:在 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];
}