2013-03-01 27 views
1

我正在嘗試存儲本地保存的有關用戶操作的分析數據,以便以後可以在用戶連接到互聯網時上傳。我希望數據在本地存儲,並且在正常情況下在應用的後續打開之間不會被刪除。我不想將數據同步到iCloud。我最好也喜歡在更新之間保留的數據。如果數據在空間不足的情況下被刪除,那很好。我應該在iOS上存儲分析數據的目錄是什麼?

我碰到在哪裏數據 - 存儲無論是在NSCachesDirectory或NSLibraryDirectory不同來源不同的答案。注意NSCachesDirectory是NSLibraryDirectory的子目錄,例如。該文件系統看起來像Application_Home/Library/Caches /。

根據官方文檔:http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTuning/PerformanceTuning.html#//apple_ref/doc/uid/TP40007072-CH8-SW9意味着我應該使用NSCachesDirectory來存儲數據,它是不是在大多數情況下刪除。這也意味着NSLibraryDirectory同步到iCloud。

根據這些問題的答案:How can I get a writable path on the iPhone?https://stackoverflow.com/a/5444762/340520/When are files from NSCachesDirectory removed?,不保留應用程序更新,並聲稱,我必須不斷地重新創建NSCachesDirectory之間NSCachesDirectory。第一個答案也意味着NSLibraryDirectory是存儲數據的最佳位置。然而那些答案是兩歲。

根據文檔和此答案:http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTuning/PerformanceTuning.html#//apple_ref/doc/uid/TP40007072-CH8-SW10,https://stackoverflow.com/a/8830746/340520,應用程序更新之間保留NSCachesDirectory。

平臺Localytics的iOS SDK存儲在NSCachesDirectory他們的數據:https://github.com/twobitlabs/Localytics-iOS/blob/master/src/LocalyticsDatabase.m Mixpanel的iOS SDK存儲其數據NSLibraryDirectory:https://github.com/mixpanel/mixpanel-iphone/blob/master/Mixpanel/Mixpanel.m

所有這些源之間,我一直傾向於使用NSCachesDirectory傾斜,但我不相信在某些情況下數據不會定期刪除。

+0

檢驗關於iPhone 4與iOS 6.1.2表示NSCachesDirectory並非該應用的終端之間刪除。 – sskates 2013-03-01 03:57:52

回答

0

緩存目錄應該只用於文件,如果他們被刪除您的應用程序可以很容易地進行更換。 Caches目錄在應用程序更新期間可能會或可能不會被清除,並且可能會在設備用完存儲空間時進行清除。只能用於臨時文件或文件,您可以輕鬆替換。

我的第一選擇將是Library/Application Support目錄(NSApplicationSupportDirectory)。請注意,這個目錄並不是默認創建的。您的應用必須在首次啓動時創建它。這個路徑在應用程序更新期間保持不變(如大多數應用程序沙箱),並通過iTunes(或iCloud)設備備份進行備份。

+0

我想爲它不要通過iTunes/iCloud的應用程序的不同實例之間進行同步。數據表示還沒有被上傳到我的服務器,但分析事件的臨時存儲。 – sskates 2013-03-01 04:16:51

+0

在這種情況下,我建議「庫」下創建自己的文件夾,並使用[技術Q&A 1719](信息https://developer.apple.com/library/ios/#qa/qa1719/_index.html )以防止文件被備份。 – rmaddy 2013-03-01 04:21:01

1

NSCachesDirectory是存儲永久性信息的錯誤位置,您需要跨應用程序啓動甚至重新啓動設備。

爲了證明我的觀點試試這個...

  1. 找一個只有8GB的磁盤空間iPhone設備。
  2. 使用你的應用程序寫在NSCachesDirectory文件。
  3. 開始下載隨機應用程序來填滿磁盤空間。很快你會看到操作系統顯示的存儲限制對話框。
  4. 現在只需重新啓動手機,啓動應用程序並查看是否可以找到您所寫的文件。

如果您第一次找到該文件,請再次嘗試實驗,您會發現文件丟失。在設備啓動時,如果你看到設備的日誌,你會發現表明清除日誌的目錄,以騰出空間等

使用NSCachesDirectory來存儲你可以保持您的服務器上下載信息。不需要上傳到服務器的信息。

相關問題