存储最初在IOS应用程序中获取的大文件的位置

时间:2015-02-21 10:20:31

标签: ios swift ios-simulator

我的应用程序在启动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。该应用程序再次下载内容。

我希望在设备的生命周期内拥有静态路径。我做错了什么或者我应该改变什么?

3 个答案:

答案 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"];

将大型文件存储在其他目录中将被苹果应用审核小组拒绝(正如我所面对的)