簡體   English   中英

iOS核心數據:對核心數據和數據庫感到困惑

[英]iOS Core Data: Confused about Core Data and database

我真的很困惑核心數據實際上是什么。 或者我想我的問題是,在處理數據庫時,您會使用Core Data嗎? 就像我想從數據庫訪問值一樣,我會使用Core Data來訪問這些值嗎? 我該如何處理這個問題?

非常感謝你的幫助。

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

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

如果您想與現有數據庫(例如Web服務器上的MySQL數據庫)進行交互,那就完全不同了。 您可以使用Core Data在設備上存儲對象的本地副本,但在這種情況下,Core Data不會關心對象是來自其他數據庫的副本。 它並不關心。

它是一種在iOS應用程序中存儲數據的便捷本機方式。 盡管您可以使用各種sqlite工具查看它創建的文件,但不要將其視為sqlite。 而是將其視為操作對應用程序重要的信息對象圖的工具。

我主要用兩種方式使用它。 首先存儲一組對應用程序很重要的靜態數據,在一種情況下是室內地圖應用程序的大量位置數據。 作為航點的大量CSV文件到達的內容被轉換為核心數據。 Core Data對此非常有用,因為它允許准備一個sqlite文件,該文件隨包含所有信息的應用程序一起提供。 來自Web服務的更新將作為更多CSV添加到Core Data以保持信息最新。 在運行時,位置信息對象(用戶所在的航點)使用謂詞(即他們點擊的點)檢索,並且該對象通過其核心數據關系指示從該點開始的位置。 核心數據提供了通過室內地圖執行A *路由所需的信息。

其次,當你有一堆以JSON形式出現的對象時,你希望以后能夠存儲和訪問這些對象。 假設你有一個典型的應用程序,你有一個用戶和一些關於用戶的信息,我們稱之為Thing。 用戶擁有東西。 當您想要了解用戶的某些信息時,您可以使用謂詞(通常是“名稱”或類似名稱)檢索核心數據記錄,並獲得有關用戶的所有信息。 您可以再次利用關系來探索用戶的連接並輕松顯示信息。 也許用戶有很多東西,然后你可以說“user.things”,你得到一個代表那些東西的NSManagedObjects NSSet。

你像數據庫一樣使用它。 它的實用性是它可以從iOS代碼的任何地方輕松訪問,它易於存儲並且易於檢索信息。 錯誤允許您通過遵循關系來檢索一個對象並導航到通過關系連接的任何對象。 因為您可以在數據模型編輯器中自己定義屬性和關系,所以可以輕松地根據需要存儲的內容進行自定義。 對我而言,它是iOS中最常用和最有用的部分之一。

如果要自動顯示Core Data中的信息,可以使用NSFetchedResultsController啟動提取並通過委托方法響應對基礎數據的更改。 如果設置UITableView以使用NSFetchedResultsController作為數據源,則只要單元格中顯示的對象發生更改,就可以自動更新表。 對於定期更新信息並希望顯示的內容保持最新的應用程序非常有用。

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

核心數據的局限在於它不適合存儲二進制文件。 如果您有需要存儲的圖像,那么存儲到圖像位置的路徑比嘗試存儲實際數據要好得多。

是的,如果您想在設備上使用本地數據庫,Core Data是適當的技術。 使用核心數據編程指南開始研究可能是有意義的。

您也可以使用SQLite (Core Data在后端使用),但Core Data提供了一些物質優勢,是iOS的首選數據庫接口。 但是,如果您出於任何原因決定繼續使用SQLite,我建議您考慮使用FMDB Objective-C SQLite包裝器

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM