iOS應用數據存取之數據庫存儲-----Core Data

iOS應用數據存取的經常使用方式有以下幾種 XML屬性列表 —— PList NSKeyedArchiver 歸檔 Preference(偏好設置) SQLite3 Core Data程序員

如今我想記錄如下我對core Data的認識 存在理由:蘋果公司爲了關照不會使用SQL數據庫的程序員,而產生的,面向對象操做數據庫的oc語言 Core Data簡介: Core Data 是iOS SDK 裏的一個很強大的框架,容許程序員以面向對象的方式儲存和管理數據。使用Core Data框架,程序員能夠很輕鬆有效地經過面向對象的接口管理數據 Core Data框架提供了對象-關係映射(ORM)的功能,即可以將OC對象轉化成數據,保存在SQLite3數據庫文件中,也可以將保存在數據庫中的數據還原成OC對象 在數據操做過程當中,無需編寫任何SQL語句 要使用Core Data,須要導入CoreData框架sql

NSPersistentStoreCoordinator的產生: 爲了讓模型對象和數據庫可以鏈接起來,蘋果公司就建立了NSPersistentStoreCoordinator這個對象,用來做爲他們之間的橋樑! [NSManagedObjectModel mergedModelFromBundles:nil];合併全部的圖形化定義的Mode--------------》[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]:創建持久化存儲調度---------------> addPersistentStoreWithType:指定數據庫文件保存的路徑,若是有,直接打開,若是沒有,新建在打開---------------> _sharedContext.persistentStoreCoordinator = store;得到數據庫操做句柄數據庫

具體使用以下 // 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]; ...---------------這裏咱們是否是能夠添加持久化存儲爲sql數據庫呢????? // 管理對象上下文 _context = [[NSManagedObjectContext alloc] init]; _context.persistentStoreCoordinator = store;框架

NSEntityDescription insertNewObjectForEntityForName 實體(數據庫的表)的描述(最開始創建數據模型時指定的實體) 實體描述,用於描述我的信息的一個對象 Context,統一負責數據庫的操做 實例: Person *p = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:_context]; p.name = @"張三"; p.age = @18; [_context save:nil];fetch

執行查詢以後url

  1. Sections屬性中記錄了分組狀況,若是沒有指定分組,則是全部對象! Sections對象遵照了NSFetchedResultsSectionInfo協議!
  2. 使用objectAtIndexPath能夠直接取出查詢的結果。
  3. 設置查詢結果控制器的代理方法,而且實現 controllerDidChangeContent:(NSFetchedResultsController *)controller 代理方法,能夠在數據庫內容發生變化時,從新刷新表格便可 全部數據變化,盡在掌控!

查詢數據——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];orm


最後,在開發中要注意 若是開發過程當中,修改了數據模型,簡單的辦法就是將沙盒中的數據庫直接刪除! 不然運行會崩潰!對象

相關文章
相關標籤/搜索