2013-11-22 84 views
0

我有以下問題:XCode保存CoreData的相對路徑並在讀取時創建完整路徑

我有實體,比如說人。對於每個人,你可以製作一張照片。我將這張照片的路徑保存在一個人的屬性中。

每當我打開這個人,我得到的照片的路徑,加載到UIImage,一切都很好。

但是,當我更新應用程序,那麼應用程序的標識符將會改變,所以不會再顯示照片。更新後照片的完整路徑是錯誤的。

是否有防止標識符更改?

如何用相對路徑保存照片?想法:我保存了coredata的可靠路徑,並在閱讀時將其放到了應用程序路徑中。

謝謝你的幫助。

+0

這個問題不清楚。什麼讓你覺得更新應用程序將改變標識符。如果您按照自己的想法使用正確的NSFileManager方法,那麼您仍然會使用該應用的沙箱。 – Abizern

回答

0

將照片的路徑存儲爲相對於應用程序文檔目錄的路徑。例如,像"photos/filename.png"

檢索照片時,首先獲取文檔目錄路徑,然後將路徑名稱附加到urlByAppendingPathComponent:

當然,與任何應用程序一樣,當您做任何事情來創建新的應用程序目錄時,例如

  • 改變應用程序簽名
  • 不同設備
  • 不同的模擬器,
  • 不同的開發計算機,

兩個核心數據存儲和文檔目錄將是空。

您可以將核心數據和文檔文件夾與存儲在軟件包中的數據(第一次運行時將其複製到文檔文件夾中)預先播種。但是,當上述任何條件創建應用程序的新實例時,這將是唯一可用的數據。

如果你想跨設備共享數據存儲的狀態,也許你想考慮iCloud。但是,iCloud在照片等大型媒體文件上效果不佳,而且還有一些已知的但帶有iCloud和Core Data的unresolved problems

0

將文件路徑存儲在NSURL中。然後,您可以將書籤數據永久保存在覈心數據中,並在稍後檢索。

- (NSData*)bookmarkForURL:(NSURL*)url { 
    NSError* theError = nil; 
    NSData* bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationSuitableForBookmarkFile 
              includingResourceValuesForKeys:nil 
              relativeToURL:nil 
              error:&theError]; 
    if (theError || (bookmark == nil)) { 
     // Handle any errors. 
     return nil; 
    } 
    return bookmark; 
} 

- (NSURL*)urlForBookmark:(NSData*)bookmark { 
    BOOL bookmarkIsStale = NO; 
    NSError* theError = nil; 
    NSURL* bookmarkURL = [NSURL URLByResolvingBookmarkData:bookmark 
              options:NSURLBookmarkResolutionWithoutUI 
              relativeToURL:nil 
              bookmarkDataIsStale:&bookmarkIsStale 
              error:&theError]; 

    if (bookmarkIsStale || (theError != nil)) { 
     // Handle any errors 
     return nil; 
    } 
    return bookmarkURL; 
} 

https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/AccessingFilesandDirectories/AccessingFilesandDirectories.html#//apple_ref/doc/uid/TP40010672-CH3-SW10