iOS设备的文档目录路径是否常量?

时间:2017-06-20 07:34:52

标签: ios iphone swift

我正在保存文档目录中的视频/图像。现在,一旦图像保存在文档目录中,我想将其引用保存在本地数据库中。所以我想我可以在本地数据库中保存图像的URL。 / p>

在我的应用程序中,它是不变的吗?

3 个答案:

答案 0 :(得分:0)

不,这不是常数。每当您的应用程序在设备上重新安装或更新时,文档目录都会发生变化,因为当安装在设备操作系统上的应用程序为具有一些随机ID的应用程序创建一个目录时,每个随机安装都会被操作系统更改。

因此,您需要使其拥有自己的动态,例如仅存储文件名并在使用时附加文档目录路径。

答案 1 :(得分:0)

我建议只在数据库中保存文件名或子目录/文件名(如果你有一个子目录),然后只将它附加到NSDocumentDirectory。

这将确保您始终知道文件的位置......

NSDocumentDirectory在更新时保持一致,因此即使您更新,文件仍应保留在文档目录中...

答案 2 :(得分:0)

这不是常数,我观察到每次启动应用程序时都会有所不同,但是您的数据会移动到这条新路径。您可以将文件名保存在数据库中,并将此文件名动态附加到NSDocument目录。

- (NSString *)documentsFilePath:(NSString *)fileName {
    NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docsDir = [dirPaths firstObject];
    NSString *filePath = [docsDir stringByAppendingPathComponent:fileName];
    return filePath;
}


- (void)storeFile:(NSString *)fileName {
    NSString *filePath = [self documentsFilePath:fileName];

    // create if needed
    if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) {

        // Write your data to file system here...
    }
}

- (void)deleteFile:(NSString *)fileName {
    NSString *filePath = [self documentsFilePath:fileName];
    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
        NSError *deleteErr = nil;
        [[NSFileManager defaultManager] removeItemAtPath:filePath error:&deleteErr];
        if (deleteErr) {
            NSLog(@"Can't delete %@: %@", filePath, deleteErr);
        }
    }
}

请处理nil检查并仅在DB中存储文件名