2012-03-07 56 views
7

我在應用商店中有一個應用程序,它使用核心數據來保存大部分數據。 例外是存儲圖像。我將子目錄中的圖像存儲到Documents目錄,並將對該圖像的NSURL引用存儲在覈心數據存儲的適當對象屬性中。應用程序更新,NSURL和文檔目錄

我們已經注意到,當更新使其到應用程序商店時,找不到這些圖像,因此不會使用與先前版本的應用程序一起存儲的引用來顯示。 現在,我懷疑問題是,因爲我們使用開發設備進行測試,所以此問題會傳播,因爲開發應用程序使用的Applications目錄中的目錄與App Store創建/使用的目錄不同。我注意到應用程序中應用程序的App store目錄與在Xcode中調試版本時創建的應用程序目錄之間的差異。 因此,存儲在覈心數據中的URL指向錯誤的應用程序文件夾。 這很難調試,因爲一旦新版本在商店中發佈,我無法下載較舊的應用程序版本。

所以我有幾個問題。我可以保證下載相同應用程序版本的人的Applications子目錄相同,這對於非開發設備來說是非問題嗎?

我是否應該存儲相對圖像的url或字符串來表示這些資源的位置,還是應該保存最終是絕對url的罰款?

非常感謝, 費利佩

回答

13

您應該使用相對URL引用存儲的文件。絕對URL可能是一個應用程序更新

文件保存在應用程序更新

當用戶下載一個應用程序更新後發生變化, 的iTunes安裝在一個新的應用程序目錄更新。然後,在刪除舊安裝之前,它將 用戶的數據文件從舊安裝移動到新應用程序 目錄。在下面的 目錄中的文件保證在更新過程中被保留:

  • APPLICATION_HOME /文件
  • APPLICATION_HOME /庫

雖然在其他用戶目錄文件 也可以被移動過,更新後不應該依賴 。

https://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTuning/PerformanceTuning.html

THX的沙箱中,申家也是用戶家中。所以有可能使用用戶家中的簡短的unix代字號,即~/Documents,~/Library等等。

使用-[NSString stringByAbbreviatingWithTildeInPath]將完整路徑轉換爲相對路徑。並用-[NSString stringByExpandingTildeInPath]來反轉。

+0

非常感謝!這正是我需要知道的! – flizit 2012-03-08 14:17:14

+2

我不知道當iTunes安裝更新時創建了一個新的應用程序目錄:我結束了使用絕對路徑失效的符號鏈接。所以要小心iOS開發者的這種行爲! :) – 2012-03-15 09:56:02

+0

該鏈接已損壞。試試:https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTips/PerformanceTips.html – 2016-03-20 14:40:29

0

我認爲你在尋找什麼如下:

NSString *appDocumentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
相關問題