我的应用程序在启动sqlite数据库时下载大约300MB。下载完成后,此sqlite数据库应该在应用程序的安装时间内可用(年:-))。我不知道在哪里存储这些文件。
我开始将数据存储在库路径中,如下所示(swift)
var sDataPath = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true);
没有我意识到在使用IOS模拟器进行开发和测试期间此路径会发生变化。例: 1.我第一次在OIS模拟器中启动应用程序。评估路径是
[/Users/user/Library/Developer/CoreSimulator/Devices/19E2CB7E-3ABB-4C0A-8B49-39A0BE392A93/data/Containers/Data/Application/5EE51B55-0A89-45FB-A1E2-9BE3DCD33463/Library]
2。该应用程序下载数据。这需要几分钟。 3.关闭模拟器并重启xcode 4.我在模拟器中再次启动应用程序,并希望在我的应用程序中已经下载了数据。图书馆路径。但不是 ... 5.应用程序评估一个新路径,该路径在路径中有另一个ID:
[/Users/user/Library/Developer/CoreSimulator/Devices/19E2CB7E-3ABB-4C0A-8B49-39A0BE392A93/data/Containers/Data/Application/429206E9-00EA-45EF-BE6E-4B2E9374BAF5/Library]
6。该应用程序再次下载内容。
我希望在设备的生命周期内拥有静态路径。我做错了什么或者我应该改变什么?
答案 0 :(得分:2)
模拟器上的路径正在变化,但在真实设备上它将是相同的。
如果我没错,在模拟器上每次重新启动时路径都会改变。在设备上,只有删除并重新安装应用程序时,路径才会更改。
答案 1 :(得分:0)
您应该将下载的图像保存到文档目录。这样,图像可以快速加载。如果你想克服重新加载单元格,那么你必须检查文件路径是否有填充。
- (NSString *)documentsPathForFileName:(NSString *)name folder:(NSString*)folderName{
return [[self pathToPatientPhotoFolder:folderName] stringByAppendingPathComponent:name];
}
- (NSString *)pathToPatientPhotoFolder:(NSString *)folderName {
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES) lastObject];
NSString *patientPhotoFolder = [documentsDirectory stringByAppendingPathComponent:folderName];
// Create the folder if necessary
BOOL isDir = NO;
NSFileManager *fileManager = [[NSFileManager alloc] init];
if (![fileManager fileExistsAtPath:patientPhotoFolder
isDirectory:&isDir] && isDir == NO) {
[fileManager createDirectoryAtPath:patientPhotoFolder
withIntermediateDirectories:NO
attributes:nil
error:nil];
}
return patientPhotoFolder;
}
你的cellForRowAtIndexPath:方法中的
{…..
NSURL *urla = [NSURL URLWithString:[NSString stringWithFormat:@"%@",[self.imagearray objectAtIndex:indexPath.item]]];
NSString *thumbnailCacheKey = [NSString stringWithFormat:@"thumb-%@",[self.imageIDarray objectAtIndex:indexPath.item]];;
UIImage *image = [UIImage imageWithContentsOfFile:[self documentsPathForFileName:thumbnailCacheKey folder:@"thumb"]];
if (!image){
//first download image here and then save that image like:
NSString *stringPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"thumb"];
// New Folder is your folder name
NSError *error = nil;
if (![[NSFileManager defaultManager] fileExistsAtPath:stringPath])
[[NSFileManager defaultManager] createDirectoryAtPath:stringPath withIntermediateDirectories:NO attributes:nil error:&error];
NSString *filePath = [stringPath stringByAppendingPathComponent:thumbnailCacheKey];
NSData *pngData = UIImageJPEGRepresentation(image, 0.8);
[pngData writeToFile:filePath atomically:YES];
}
else{// image is already downloaded, so just set that image
cell.imageView.image = image;
}
….
}
此代码在DocumentDirectory中创建文件夹并将图像保存在那里并从那里获取。我保存了一个独特的photoID,因此图像不能相同。您可以根据自己的要求保存。
答案 2 :(得分:0)
您应该将其存储在Cache文件夹中。
NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"file.plist"];
将大型文件存储在其他目录中将被苹果应用审核小组拒绝(正如我所面对的)