iOS基礎 - 數據庫CoreData

1、iOS應用數據存取的經常使用方式

XML屬性列表 —— PList程序員

NSKeyedArchiver 歸檔數據庫

Preference(偏好設置)框架

SQLite3 fetch

Core Dataurl

2、Core Data簡介

Core Data iOS SDK 裏的一個很強大的框架,容許程序員以面向對象的方式儲存和管理數據。使用Core Data框架,程序員能夠很輕鬆有效地經過面向對象的接口管理數據spa

Core Data框架提供了對象-關係映射(ORM)的功能,即可以將OC對象轉化成數據,保存在SQLite3數據庫文件中,也可以將保存在數據庫中的數據還原成OC對象代理

在數據操做過程當中,無需編寫任何SQL語句orm

要使用Core Data,須要導入CoreData框架對象

3、模型文件及實體(Entity

要使用Code Data,首先須要定義模型文件,描述應用程序中的全部實體(Entities排序

所謂實體,是跟數據庫進行映射的對象

4、Core Data主要對象

NSManagedObjectContext:負責應用和數據庫之間的交互(CRUD)

NSPersistentStoreCoordinator:添加持久化存儲庫(如SQLite數據庫),是物理數據存儲的物理文件和程序之間的聯繫的橋樑,負責管理不一樣對象上下文

NSManagedObjectModel:被管理的對象模型

NSEntityDescription:實體描述

5、打開數據庫

// 1. 實例化持久化的存儲

// 1.1 Bundle中加載被管理的數據模型

NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];

// 1.2 實例化持久化存儲調度

NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

// 1.3 添加持久化存儲(SQLite)

[store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error];

// 管理對象上下文

_context = [[NSManagedObjectContext alloc] init];

_context.persistentStoreCoordinator = store;

執行查詢以後

1. Sections屬性中記錄了分組狀況,若是沒有指定分組,則是全部對象!

Sections對象遵照了NSFetchedResultsSectionInfo協議!

2. 使用objectAtIndexPath能夠直接取出查詢的結果。

3. 設置查詢結果控制器的代理方法,而且實現

controllerDidChangeContent:(NSFetchedResultsController *)controller

代理方法,能夠在數據庫內容發生變化時,從新刷新表格便可

全部數據變化,盡在掌控!

6、查詢數據——NSFetchedResultsController

NSManagedObjectContext *context = [[DataManager sharedDataManager] sharedContext];

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];

// 定義查詢排序

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];

request.sortDescriptors = @[sort];

// 定義查詢結果控制器

_fetchedResultController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];

[_fetchedResultController performFetch:&error];

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];

request.predicate = [NSPredicate predicateWithFormat:@"%K LIKE '*52*' OR name CONTAINS ''", @"phoneNo"];

NSArray *array = [_context executeFetchRequest:request error:nil]; 

相關文章
相關標籤/搜索