我在文檔目錄中保存視頻/圖像。現在,一旦圖像保存在文檔目錄中,我想將其引用保存在本地數據庫中。因此,我想我可以將圖像的URL保存在本地數據庫中。iOS設備的文檔目錄路徑是否爲常量?
那麼它在我的應用程序中是不變的?
我在文檔目錄中保存視頻/圖像。現在,一旦圖像保存在文檔目錄中,我想將其引用保存在本地數據庫中。因此,我想我可以將圖像的URL保存在本地數據庫中。iOS設備的文檔目錄路徑是否爲常量?
那麼它在我的應用程序中是不變的?
不,它不是恆定的。每當你的應用程序重新安裝或更新設備時,文檔目錄將改變,因爲當安裝在設備OS上的應用程序爲某個隨機ID的應用程序創建了一個目錄,並且每個隨機安裝該應用程序時,它都會被操作系統更改。
所以,你需要讓它動態擁有你自己的,比如只存儲文件名並且在使用它時附加文檔目錄路徑。
我建議只保存數據庫中的文件名或子目錄/文件名(如果有子目錄),然後只將其附加到NSDocumentDirectory。
這將確保你總是知道該文件是...
NSDocumentDirectory然而翻過一致更新,所以這些文件應該保持在即使你更新文檔目錄...
這是不是一成不變的,我觀察到每次啓動應用程序時它都會有所不同,但是您的數據會移到這個新路徑。您可以將您的文件名保存在數據庫中,並將此文件名動態添加到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
準確地說,路徑相對於文檔目錄是一致的。絕對路徑不一致。 – Sulthan