2011-02-18 74 views
2

我正在研究在iPhone上存儲非標準類型(字符串,int16等)的最佳方法。 我最終會做的是下載一個XML文件並存儲諸如日期,標題,名稱,媒體等值。我剛剛發現了coredata數據模型,我相信這將是存儲此類數據的好選擇,所以我不必在下次應用程序啓動時下載xml。使用coredata存儲/緩存非標準數據類型

我不確定的是什麼限制(如有的話)我可以在實體店。例如,其中一個xml元素會將一個url保存到一小段音頻(小於1mb)和一個url到圖像中。將音頻數據,圖像作爲屬性存儲在實體中還是應該保存到字符串和整數等等以及其他地方存儲的非標準類型是否合適?

我想我真正要問的是適合緩存的數據模型嗎?

最終,我正在尋求的是一種解決方案,用於將數據存儲在與任何一個視圖無關的位置上,還有一個我需要的所有東西的原子模型,米英寸

回答

1

的數據模型,適用於高速緩存,而是因爲你沒有緩存的明確控制(你可以指責一個數據對象,但它可能會留在記憶裏),建議分開非常大二進制對象。將它們作爲資源存儲在文件系統中,並在Core Data中管理它們的鏈接(URL或路徑)。

< 1MB的文件似乎還好由核心數據進行處理,但它也取決於你的應用程序有多少人使用。

另外,如果您確實在Core Data中存儲了大文件,則應該使用SQLite存儲。

+0

我同意並補充說,你應該(如果你還沒有)看看蘋果的核心數據編程指南。此外,要在Core Data中存儲音頻數據之類的內容,您需要使用NSData - 前面提到的關於大小的警告。最後,如果您確實選擇將BLOB存儲在覈心數據中,則建議您將實際數據存儲在與對象元數據不同的實體中,以避免不必要的/不想要的大量數據加載。 – westsider 2011-02-18 18:36:59

+0

感謝您的意見。我想我會看看SQLLite的東西。 – dubbeat 2011-02-21 09:20:00

1

從MHC以上答案是好的,但如果你存儲不需要進行索引(不能在SQLite的反正做)大型二進制對象,推薦的方法是存儲的實際數據在文件系統的某處(比如NSDocumentsDirectory中),並在Core Data實體中存儲文件的路徑。

核心數據加載到內存中獲取對象的所有部分,這對於二進制數據實體的少數情況下可能迅速導致你在iOS設備上運行的內存。

如果它存儲在文件系統中,你可以當你需要它懶加載數據。