Xcode 4.5和iOS 6 – Core Data 持久化資料存放區

來源:互聯網
上載者:User

Core Data是iOS編程中使用持久化資料存放區的一種方式。在以前的教程 – 讀寫應用程式的設定資料,我們已經提供了三種方式來實現App資料的儲存,分別為:

(1)使用者預設設定 – 這種情況通常不需要使用者幹預,如遊戲通關資訊,Video播放記錄,或者App退出之後,下次進入時,希望恢複到退出時的情況。
(2)設定束(Settings Bundle)– 提供了一個通過iPhone、iPad的設定(Settings)應用程式進行配置的介面。
(3)直接存取檔案系統 – 讀寫屬於當前App的iOS 檔案系統部分的檔案。

在一些情況下,我們可以考試使用Core Data來持久化資料。需要知道的是,Core Data 並不是資料庫本身,是Apple提供的對象持久化技術(Object Persistent Technology)。Core Data 架構為資料變更管理、Object Storage Service、對象讀取恢複的功能提供了支援。它可以使用SQLite作為持久化儲存的類型,但本身並不是一個資料庫。

教程將重點介紹和示範Core Data架構的使用,並不是建立一個完美的應用程式,而是示範基於Core Data架構建立應用程式的過程中,所需要使用到的一些基礎類、工具和技術。

下面先瞭解Core Data架構提供的一些核心類,在App開發過程中需要使用到。

Core Data 堆棧(Stack)

堆棧(Stock)術語用來表述Core Data架構對象集合,這些對象實現從模型對象中擷取資料,和儲存資料到持久化儲存(Persistent Store)中-也就是資料檔案。從概念上講,一個持久化儲存(Persistent Store)就像一個資料庫,有資料表和資料記錄。我們可選用的Core Data儲存類型之一是SQLite,但是隱藏檔並不一定是實際的資料庫。

是一個簡單的、且常用的Core Data堆棧配置。我們通常直接使用的類是堆棧頂部的Managed Object Context(被管理物件內容)和它所包含的Managed Objects(被管理對象)。

被管理對象和被管理物件內容

被管理對象(Managed Object)是NSManagedObject對象或NSManagedObject子類對象執行個體。其實,也就是資料庫中資料表記錄的對象表示,由 Core Data管理的模型(Model)對象。被管理對象(Managed Object)表示應用程式中操作的資料,例如人力資源應用系統中的部門和員工;畫圖應用程式中的各類形狀、文本等等。一個被管理對象總是和一個被管理對 象上下文(Managed Object Context)相關聯。

被管理物件內容(Managed Object Context)是NSManagedObjectContext對象執行個體。上下文表示應用程式中的一個單一對象空間,它的主要職責管理被管理對象 (Managed Object)集合。這些對象組成了一組關聯的模型對象(Model Object),描繪了一個或多個持久化儲存(Persistent Store)。上下文(Context)是非常強大的對象,在應用程式中起到中心作用,負責生命週期管理到驗證、關係維護(Relationship Maintenance)和撤銷/重做特性。

在我們建立一個新的被管理對象時,將它插入到Context中。從資料庫中擷取的現存記錄也將放到Context中,作為被管理對象。所有對被管理對象(Managed Object)的修改都保留在記憶體中,直到正在提交給持久化儲存儲存上下文(Context)。

描繪了被管理物件內容(Managed Object Context)包含2個被管理對象(Managed Object),對應著資料庫中2條記錄。其中一個對象的屬性值已經在記憶體中更新過了,但還沒有提交到資料庫儲存。另外,還有2條記錄在資料庫中,並沒有 對應的被管理對象(Managed Object)。

被管理物件模型(Managed Object Model)

被管理物件模型是NSManagedObjectModel執行個體。被管理物件模型是資料庫Schema的對象表示,是實體描述對象(Entity Description Object – NSEntityDescription執行個體)的集合。

一個實體描述對象(Entity Description Object)描述了資料庫中一個資料表實體,包括表名稱、表對應的被管理對象的名稱、屬性(Attributes)和關係(Relationships)等等。

描繪了實體描述對象、資料庫中資料表和被管理對象(對應資料庫表的一條記錄)之間的關係。

從可以看出,每一個被管理對象(Managed Object)都有對應實體物件的引用。
Core Data使用模型(Model)來映射應用程式中被管理對象和資料庫中的資料記錄。需要注意的是,如果我們修改資料庫的Schema,Core Data將無法使用之前建立的模型來讀取資料庫記錄了。很多持久化機制都存在這個問題。

我們一起看看下面這些範例程式碼:

Customer *customer1 = (Customer *)[NSEntityDescription insertNewObjectForEntityForName:@"Customer"
inManagedObjectContext:self.managedObjectContext];
customer1.customerID = [NSNumber numberWithInt:1];
customer1.customerName = @"EntLib.com";
customer1.password = @"EntLib.com";
customer1.userName = @"EntLib.com";

Customer 類是NSManagedObject子類,NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:方法建立customer1 被管理實體物件,並和被管理物件內容(Managed Object Context)self.managedObjectContext相關聯。

持久化儲存協調器(Persistent Store Coordinator)

持久化儲存協調器(Persistent Store Coordinator)在Core Data管理資料過程中扮演重要的角色,然而,在使用Core Data架構時,我們通常不必直接和協調器互動。這裡我們詳細介紹持久化儲存協調器,如果你對此沒有興趣,可以跳過去。

持久化儲存協調器是NSPersistentStoreCoordinator執行個體,管理持久化Object Storage Service(Persistent Object Store)集合。一個持久化Object Storage Service表示一個外部隱藏檔。

描繪了協調器扮演的作用。不過,一般iOS 應用程式中,我們通常使用單一儲存(也就是一個資料庫檔案),因此Core Data堆棧並不會像這麼複雜。

下面一段代碼涉及到持久化儲存協調器(Persistent Store Coordinator)的應用,建立持久化儲存協調器(Persistent Store Coordinator)對象執行個體,並設定被管理物件內容(Managed Object Context)的持久化儲存協調器(Persistent Store Coordinator)。

NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask] lastObject];
NSURL *storeDatabaseURL = [url URLByAppendingPathComponent:@"ShoppingCart Database"];
// url is now <Document Directory>/ShoppingCart Database
NSError *error = nil;
NSPersistentStoreCoordinator *persistentStoreCoordinator =
[[NSPersistentStoreCoordinator alloc]
initWithManagedObjectModel:[NSManagedObjectModel mergedModelFromBundles:nil]];
if(![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeDatabaseURL options:nil error:&error])
{
NSLog(@"Error while loading persistent store ...%@", error);
}

_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:persistentStoreCoordinator];

要想對上面描述的Core Data類有比較深入的瞭解,還是必須要結合實際的範常式序來體會。

 

Core Data 持久化資料存放區 --系列文章:

Core Data持久化資料存放區(2)-使用Core Data實現簡單ShoppingCart應用程式
Core Data持久化資料存放區(3)-編寫Core Data代碼

Core Data持久化資料存放區(4)-運行ShoppingCart應用程式

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.