iOS高級課程 — 高級數據持久化CoreData – iPhone手機開發技術文章 iPhone軟體開發教學課程

一 CoreData數據庫框架的歷史

CoreData數據持久化框架是Cocoa API的一部’,首次在iOS3.0版本的系統中出現,它允許按照實體 — 屬性 — 值模型組織數據, 並以XML,二進制文件或者SQLite數據文件的格式持久化數據.

二 CoreData數據庫框架的常用類

實體管理類: NSManagedObject

實體描述類: NSEntityDescription

數據管理器類: NSManagedObjectContext

數據連接器類: NSPersistentStoreCoordinator

數據模型器類: NSManagedObjectModel

三 CoreData類之間的關系

四 使用CZ喎?/kf/ware/vc/” target=”_blank” class=”keylink”>vcmVEYXRhyv2+3b/iv/K83LXEvPK1pbe9yr08L2gzPgo8cD48YnI+CjwvcD4KPGgzPrTmtKLOxLz+us2z1r7Du6+05rSiPC9oMz4KPGgzPrTmtKLOxLz+OiDTw8C0tOa0orrNudzA7cr9vt21xM7EvP4saU9T1tDWp7PWM9bWtOa0osDg0M06IE5TU1FMaXRlU3RvcmVUeXBlLCBOU0JpbmFyeVN0b3J5VHlwZSwgTlNJbk1lbW9yeVN0b3JlVHlwZTwvaDM+CjxoMz6z1r7Du6+05rSiKE5TUGVyc2lzdGVudFN0b3JlKSA6IMrHttTKtbzKzsS8/rXE0rvW1k9iamVjdGl2ZaGqQyCx7cq+t73KvSwg0ru49rG7tdey47fi17C6w7XEwOAs08PT2rTmtKLK/b7dPC9oMz4KPHA+PGJyPgo8L3A+CjxoMz6z1r7Du6+05rSi1vrA7TwvaDM+CjxoMz5OU1BlcnNpc3RlbnRDb29yZGluYXRvciwgQ29yZURhdGG1xLrL0MTA4DwvaDM+CjxoMz6z1r7Du6+05rSi1vrA7bXEz8Ky48rHs9a+w7uvtOa0osr9vt0sIMnPsuPKx7PWvsO7r7TmtKLJz8/CzsQ8L2gzPgo8aDM+yrXP1rTTz8Ky47vxyKHK/b7dLCDP8snPsuPM4bmpyv2+3TwvaDM+CjxoMz7T69auz+C52MGstcTKx9K7uPaxu7ncwO21xLbUz/PEo9DNPC9oMz4KPHA+PGJyPgo8L3A+CjxoMz6xu7ncwO221M/zyc/Pws7EPC9oMz4KPGgzPk5TTWFuYWdlZE9iamVjdENvbnRleHQsIENvcmVEYXRhINbQ08PT2rLZ1/e6zcq508PK/b7dLCC/ydLU09C24Lj2PC9oMz4KPGgzPtK7uPbB2cqxyv2+3b/iLCC4tNbGyv2+3bW9xNq05iwgsqKyu9Owz+zUrcq8yv2+3Swgs/23x8i3yM+xo7TmPC9oMz4KPGgzPkNvcmVEYXRht7W72LXEyv2+3crHvt/M5bXEttTP8ywgsrvKxyYjMjA1NDA7LiDS8rTLY29udGV4dLncwO21xMrHTlNNYW5hZ2VkT2JqZWN0ttTP8zwvaDM+CjxwPjwvcD4KPHByZSBjbGFzcz0=”brush:java;”>// Override to support editing the table view.
– (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source

//刪除數據庫裡的元素
[self.context deleteObject:[self.itemInfoArray objectAtIndex:indexPath.row]];

//刪除數組裡的元素
[self.itemInfoArray removeObjectAtIndex:indexPath.row];

//刪除Cell
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

//保存更改
[self.context save:nil];

} else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}

被管理的對象相關類

NSManagedObjectMode, 被管理對象模型, 管理多個對象

NSManagedObject, 被管理對象, CoreData 返回的數據模型, 被管理的對象是根據實體描述生成的

NSEntityDescription, 實體描述類, 根據實體創建被管理對象

Entity, 實體類, 試題是對文件數據的描述. 被管理對象表示實體, 實體包含名稱, 屬性(字段) 和關系, 實體的名稱通常與被管理對象名一致

數據查詢

NSFetchRequest, 查詢請求, 可以做排序操作,也可以使用謂詞

//從CoreData中取出數據
    NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"AddCoreData"];

NSSortDescriptor, 排序操作

//排序規則 ascending為YES 升序  NO 為降序
    NSSortDescriptor * sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"currentDate" ascending:YES];
    
    [fetchRequest setSortDescriptors:@[sortDescriptor]]; //設置排序規則
    
    //要求誰遵循排序規則
    [self.context executeFetchRequest:fetchRequest error:nil];

NSManagedObjectContext根據NSFetchRequest查詢數據, 以數組形勢返回, 數組中包含被管理對象

//把得到的數據存放到數組裡
    [self.itemInfoArray setArray:[self.context executeFetchRequest:fetchRequest error:nil]];

五 使用CoreData 數據庫框架的高級方式

模型版本升級和數據遷移

CoreData支持隨著App開發演進而帶來的對象模型(ManagedObjectModel)升級或修改的管理.模型的改變將導致不兼容(或不能打開)以前版本創建的存儲. 如果你要改變你的模型,你就必須要改變現有存儲中的數據, 也就是數據存儲格式(store format) — 這被稱為遷移(migration)

總結

CoreData數據框架的實現核心是持久化存儲棧

與CoreData數據庫框架的所有交互都是通過NSManagedObjectContext完成的, NSManagedObjectContext管理操作

NSManagedObjectContext中的數據是緩存在內存中的副本, 要想達到持久化目的必須更新保存.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。