2012-10-09 141 views
2

我真的很困惑什麼是核心數據。或者我想我的問題是,在處理數據庫時,您會使用Core Data嗎?就像我想從數據庫訪問值一樣,我是否會使用Core Data來訪問這些值?我將如何處理這個問題?iOS核心數據:關於核心數據和數據庫的困惑

非常感謝您的幫助。

回答

8

核心數據是一個完成「對象持久化」工作的框架。換句話說,它是可以使用的代碼,負責將對象集合保存到磁盤並稍後再加載它們。它做了很多工作來允許您存儲大量數據並一次只加載您需要的對象,並在內存不足時卸載它們。

核心數據可以使用數據庫來實現這一點,但這是業務,而不是你的。當你使用Core Data時,它是一個黑盒子。你告訴它保存數據,然後退出。

如果您想與現有的數據庫(如Web服務器上的MySQL數據庫)進行交互,那完全是另一回事。您可以使用核心數據在設備上存儲對象的本地副本,但在這種情況下,核心數據不會在意這些對象是來自其他數據庫的副本。它不關心。核心數據編程指南中的

+0

好的,謝謝,所以我的問題是現在,我將如何與數據庫交互,我會走什麼路線?什麼樣的數據庫最適合?或者,如果我想通過網絡將值存儲到數據庫服務器上,我將如何處理這個問題。非常感謝! – AustinT

+1

您似乎在詢問關於Web服務的後端 - 您將使用JSON over HTTP或類似方式與「數據庫服務器」進行通信。也許你應該看看parse.com或其他後端服務,以開始你想做的任何事情。 –

+0

是的,我想我是要求後端謝謝你! – AustinT

3

是的,如果你想在你的設備上使用本地數據庫,Core Data是合適的技術。用Core Data Programming Guide開始您的研究可能是有意義的。

您可以選擇使用SQLite(核心數據在後端使用),但核心數據提供了一些材料優勢,並且是iOS的首選數據庫接口。如果你決定追求SQLite出於任何原因,但是,我建議你考慮使用FMDB Objective-C SQLite wrapper

但核心數據通常是要走的路。

+0

+1。我會說如果你打算對Core Data做任何嚴肅的事情,就必須閱讀。 –

+0

但是如果您需要利用遠程數據庫,您會做什麼?蘋果在解釋Core Data如何適用 - 或者在這種情況下並沒有很好的工作。提前致謝。 –

+0

@AlexZavatone他們沒有真正討論,因爲iOS應用程序和服務器數據庫之間確實沒有整合。您通常在您的Web服務器上運行Web服務,該服務器與服務器上的數據庫進行通信。 iOS應用程序與服務器的集成僅限於提出Web服務的請求,並且與服務器的數據庫完全隔離。 – Rob

4

這是一種方便的原生方式,可以將數據存儲在您的iOS應用程序中。不要認爲它是sqlite,儘管你可以通過各種sqlite工具查看它創建的文件。相反,將其視爲操縱對您的應用程序很重要的信息對象圖的工具。

我已經在兩種主要方式中使用它。首先要存儲一堆對應用程序很重要的靜態數據,一種情況下,這是一個室內地圖應用程序的大量位置數據。隨着一個海量的CSV文件被轉換爲核心數據, Core Data對此非常有用,因爲它允許準備一個包含所有信息的應用程序附帶的sqlite文件。來自Web服務的更新隨着更多的CSV添加到Core Data中以保持信息的最新狀態。在運行時,位置信息對象(用戶所在的路標)通過謂詞(即它們點擊的點)來檢索,並且該對象通過其核心數據關係指示從該點可能走向哪裏。 Core Data提供了通過室內地圖執行A *路由所必需的信息。

其次,如果您有一堆以JSON形式出現的對象,並且希望能夠稍後存儲和訪問這些對象,那就太棒了。比方說,你有一個典型的應用程序,你有一個用戶和一些關於用戶的信息,我們稱之爲事情。用戶擁有東西。當你想知道某個用戶的某些事情時,你可以使用一個謂詞(通常是「名稱」或類似的名稱)來檢索核心數據記錄,並獲得有關用戶的所有信息。再次,您可以利用關係來探索用戶的連接並簡化顯示信息。也許用戶有很多東西,那麼你可以說「user.things」,並且你得到一個代表這些事情的NSManagedObjects的NSSet。

您可以像使用數據庫一樣使用它。它的實用性在於它可以很容易地從iOS代碼中的任何位置訪問,存儲起來也很容易,而且也易於檢索信息。錯誤使您可以檢索一個對象,並根據關係導航到通過關係連接的任何對象。由於您在數據模型編輯器中自己定義屬性和關係,因此可以輕鬆地爲您需要存儲的內容進行自定義。對我來說,它是iOS中使用最多,最有用的部分之一。

當你想從核心數據自動化的信息顯示,您可以使用一個NSFetchedResultsController發起獲取,並通過委託方法來改變底層數據作出迴應。如果將UITableView設置爲使用NSFetchedResultsController作爲數據源,則只要單元格中顯示的對象發生更改,就可以自動更新表格。對於定期更新信息並希望顯示內容保持最新的應用程序非常有用。

當您的對象模型更改時,可以保留所有現有信息並將其遷移到新模型。核心數據儘可能管理自動(輕量級遷移),或者如果您做了更爲徹底的更改,則可以提供處理遷移的規則。

核心數據的侷限性在於它對存儲二進制文件並不好。如果您有需要存儲的圖像,比存儲實際數據要好得多,以存儲圖像位置的路徑。