我正在保存文档目录中的视频/图像。现在,一旦图像保存在文档目录中,我想将其引用保存在本地数据库中。所以我想我可以在本地数据库中保存图像的URL。 / p>
在我的应用程序中,它是不变的吗?
答案 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中存储文件名