2017-06-20 34 views
0

我在文檔目錄中保存視頻/圖像。現在,一旦圖像保存在文檔目錄中,我想將其引用保存在本地數據庫中。因此,我想我可以將圖像的URL保存在本地數據庫中。iOS設備的文檔目錄路徑是否爲常量?

那麼它在我的應用程序中是不變的?

回答

0

不,它不是恆定的。每當你的應用程序重新安裝或更新設備時,文檔目錄將改變,因爲當安裝在設備OS上的應用程序爲某個隨機ID的應用程序創建了一個目錄,並且每個隨機安裝該應用程序時,它都會被操作系統更改。

所以,你需要讓它動態擁有你自己的,比如只存儲文件名並且在使用它時附加文檔目錄路徑。

0

我建議只保存數據庫中的文件名或子目錄/文件名(如果有子目錄),然後只將其附加到NSDocumentDirectory。

這將確保你總是知道該文件是...

NSDocumentDirectory然而翻過一致更新,所以這些文件應該保持在即使你更新文檔目錄...

+2

準確地說,路徑相對於文檔目錄是一致的。絕對路徑不一致。 – Sulthan

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

相關問題