Core Data 是蘋果公司所開發的 macOS 作業系統（舊稱：Mac OS X 及 OS X）中 Cocoa API 的一部分，首次在 Mac OS X 104 Tiger 與 iOS 30 系統中出現 Apple Core Data Tutorial for iPhone OS。它允許按照實體 屬性 值模型組織資料，並以 XML，二進位制檔案或 SQLite 資料檔案的格式將其序列化。Core Data 允許使用者使用代表實體和實體間關係的高層物件來操作資料。它也可以管理序列化的資料，提供物件生存期管理與 object graph 管理，包括儲存。Core Data 直接與 SQLite 互動，避免開發者使用原本的 SQL 語句 Apple Core Data Programming Guide。 就像 Cocoa 繫結在模型 檢視 控制器設計中做了很多控制器的工作一樣，Core Data 做了很多資料模型的工作。它的主要任務是負責資料更改的管理，序列化到磁碟，最小化記憶體佔用，以及查詢資料。 專長於 Core Data 及 Cocoa 軟體開發的資訊圖書作家 Marcus Zarra 曾說： 使用方法 Core Data 使用包括實體和實體間關係，以及查詢符合某些條件的實體的請求等內容的高層資料模型描述資料。開發者可以在純物件層上查詢與管理這些資料，而不必擔心儲存和查詢的實現細節。Interface Builder 中的控制器物件可以直接獲取與管理實體，若與 Cocoa 繫結結合，則可以在不寫自定義程式碼的情況下讓使用者介面顯示、修改與管理資料模型中的大部分內容。 例如：開發者希望開發一個管理 vCard 的程式。作者希望使用 Core Data 將一些 vCard 讀入物件中，然後把它們存入一個大 XML 檔案中。開發者需要在 Xcode 中建立資料模型，然後到 Interface Builder 中加入 Core Data Entity 項以建立其資料模型對應的 GUI。然後，開發者可以加入標準的 ObjectiveC 程式碼以讀取 vCard，並將資料寫入由 Core Data 管理的實體中。在此，開發者的程式碼是管理 Core Data 物件，而非其對應的 vCard。最後，將 Save 選單項連線到控制器物件對應的方法上，使得控制器在接到儲存訊息後自動的檢查資料堆疊，確認資料是否合法，最後利用當前更改重寫對應的 Core Data 文件。在整個過程中，開發者只需要專注於將 vCard 檔案轉換為 Core Data 實體的過程，而不需關心例如資料的顯示、合法性檢查、儲存等其它部分，提高了開發效率。 Core Data is organized into a large hierarchy of classes though interaction is only prevalent with a small set of them Core Data 由相對龐大的類繼承體系組成，但開發者需要關注的介面只是其中的一個相對小的子集。 類名 用途 關鍵方法 NSManagedObject 資料物件 管理屬性 entity valueForKey setValue forKey NSManagedObjectContext 資料庫 獲取與儲存 executeFetchRequest error save NSManagedObjectModel 資料模型 entities fetchRequestTemplateForName setFetchRequestTemplate forName NSFetchRequest 請求資料 setEntity setPredicate setFetchBatchSize NSPersistentStoreCoordinator 中介 儲存資料 addPersistentStoreWithType configuration URL options error persistentStoreForURL NSPredicate 確定查詢條件 predicateWithFormat evaluateWithObject Stevenson Core Data 類總覽 Jurewitz 使用 Core Data 儲存格式 Core Data 可以將資料儲存為 XML，二進位制檔案或 SQLite 檔案。在 Mac OS X 105 Leopard 及以後的版本中，開發者也可以透過繼承 NSPersistentStore 類以建立自定義的儲存格式。每種方法都有其優缺點，例如 XML 的可讀性，SQLite 的節約空間等。Core Data 的這一方面類似於原始的 Enterprise Objects Framework（EOF）系統，但 EOF 中開發者可以使用相對簡潔的查詢方式，而在 Core Data 中，只能使用一個語法類似 SQL 子集的查詢語言，稱為 PredicateApple Predicate Programming Guide。 Core Data 是標準化的，可以自由的讀寫 Xcode 資料模型檔案（通常是xcdatamodel 檔案）。與 EOF 不同，Core Data 目前沒有設計多使用者或多執行緒訪問模式。模型遷移通常也需要程式碼，若其它開發者依賴於某個資料模型，則該資料模型的設計者可能在模型發生改變時需要與新資料模型一起提供版本轉換程式碼。 歷史與發展 Core Data 的很大一部分設計都歸功於早期的 NeXT 產品，Enterprise Objects Framework（EOF） Apple EOModeler User Guide。 腳註 參考文獻 蘋果公司 2009 年 9 月 17 日 Core Data Programming Guide Retrieved from httpdeveloperapplecomiphonelibrarydocumentationCocoaConceptualCoreDatacdProgrammingGuidehtml 蘋果公司 2009 年 9 月 Core Data Tutorial for iPhone OS Retrieved from httpswebarchiveorgweb20100323200755httpdeveloperapplecomiPhonelibrarydocumentationDataManagementConceptualiPhoneCoreData01IntroductionIntroductionhtml 蘋果公司 2010 年 6 月 14 日 Predicate Programming Guide 來自 蘋果公司 2006 年 EOModeler User Guide Retrieved from httpdeveloperapplecomlegacymaclibrarydocumentationWebObjectsUsingEOModelerIntroductionIntroductionhtmlapple_refdocuidTP30001018CH201TP1 Jurewitz M Apple Inc 2010 iPhone Development Videos Working With Core Data Retrieved from httpdeveloperapplecomvideosiphonevideoadvancedcoredata Stevenson S 2005 Core Data Class Overview Retrieved from httpcocoadevcentralcomarticles000086php Zarra M S 2009 Core Data Apples API for Persisting Data on Mac OS X The Pragmatic Programmers LaMarche J Mark D 2009 More iPhone 3 Development Tackling iPhone SDK 3 Apress 外部連結 Apple Inc 2006 Developing With Core Data Retrieved from httpdeveloperapplecommacosxcoredatahtml Apple Inc 2009 Web Objects Tutorial Retrieved from httpdeveloperapplecomlegacymaclibrarydocumentationDeveloperToolsConceptualWOTutorialIntroductionIntroductionhtml CocoaDev nd Retrieved from httpswebarchiveorgweb20080801025517httpwwwcocoadevcom Stevenson S 2005 Build A Core Data Application Retrieved from httpcocoadevcentralcomarticles000085php CategoryNeXT CategoryMac OS 介面 Category 資料建模 Category 資料管理 Category 蘋果手機