你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS- CoreData 數據庫管理利器!

iOS- CoreData 數據庫管理利器!

編輯:IOS開發綜合
1.前文                                 上次用SQLite3實現了數據管理,這次准備用CoreData來實現。   Core Data 是iOS SDK 裡的一個很強大的框架,允許程序員以面向對象的方式儲存和管理數據。使用Core Data框架,程序員可以很輕松有效地通過面向對象的接口管理數據   相比SQLite3來說,用CoreData更有利於程序員來管理數據,   除了開頭的准備工作略微繁瑣點,後面的操作都很方便。   而且在CoreData在數據操作過程中,無需編寫任何SQL語句,這一點和JAVA裡的hibernate框架類似。   那麼,下面我就直接說說它的實現步驟。       2.CoreData實現的主要步驟                       2.1.要使用Core Data,首先需要導入CoreData框架                     表結構:NSEntityDescription   表記錄:NSManagedObject   數據庫存放方式:NSPersistentStoreCoordinator(持久化存儲協調者)   數據庫操作:NSManagedObjectContext(被管理的對象上下文)   2.2.接著要使用Code Data,首先需要定義模型文件,描述應用程序中的所有實體(Entities)           2.3.創建連接數據庫                                     首先需要創建一個操作數據庫的上下文。NSManagedObjectContext 操作數據庫的上下文需要設置一個調度者屬性,這個調度者是用來將圖形化建立的模型和數據庫聯系起來。 給調度者添加一個需要聯系的數據庫。         1 // Merging合並可以將圖形化建立的所有Model匯總到一個數據庫文件中  2     NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];  3       4     // 調度者的實例化,需要Model  5     NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];  6       7     // 數據庫是一個文件,持久化連接的文件  8     NSError *error = nil;  9     NSURL *url = [@"my.db" appendDocumentDirURL]; 10      11     // 添加持久化存儲的數據庫 12     [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error]; 13      14     if (error == nil) { 15         NSLog(@"數據庫建立成功"); 16          17         // 獲取到數據庫操作的上下文,類似於SQLite的句柄 18         _sharedContext = [[NSManagedObjectContext alloc] init]; 19          20         // 讓上下文記錄住存儲調度 21         _sharedContext.persistentStoreCoordinator = store; 22     } else { 23         NSLog(@"數據庫建立失敗"); 24     }   2.4.添加,更新,刪除                                      添加:   1.新建實體 INST (插入)   1    Person *p = [[Person alloc] init]     2.設置實體的屬性   1 // 設置對象內容 2     person.name = _nameText.text; 3     person.phoneNo = _phoneText.text; 4     person.qq = _qqText.text; 5     person.weibo = _weiboText.text;     3.保存上下文      1      //實體描述  2      [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context]  3   4     // 獲取上下文  5     NSManagedObjectContext *context = [[DataManager sharedDataManager] sharedContext];  6   7     // 讓上下文保存  8     if ([context save:nil]) {  9         NSLog(@"保存成功"); 10          11         // 返回上級視圖控制器 12         [self.navigationController popViewControllerAnimated:YES]; 13     } else { 14         NSLog(@"保存失敗!"); 15     }           更新:   1.判斷是否已有一模一樣的模型         //判斷   Person *person = _editPerson;       // 如果person == nil表示是新建用戶     if (person == nil) {         person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context];     }       2.設置實體屬性      person.name = _nameText.text;     person.phoneNo = _phoneText.text;     person.qq = _qqText.text;     person.weibo = _weiboText.text;     3.保存上下文     1     // 讓上下文保存 2     if ([context save:nil]) { 3         NSLog(@"保存成功"); 4          5         // 返回上級視圖控制器 6         [self.navigationController popViewControllerAnimated:YES]; 7     } else { 8         NSLog(@"保存失敗!"); 9     }           刪除   // 1. 首先找到要刪除哪條記錄         Person *person =         1 // 2. 刪除  2         NSManagedObjectContext *context = [[DataManager sharedDataManager] sharedContext];  3           4         // 讓上下文刪除  5         [context deleteObject:person];  6           7         // 上下文保存  8         if ([context save:nil]) {  9             NSLog(@"刪除成功!"); 10         } else { 11             NSLog(@"刪除失敗!"); 12         }   2.4.查詢                                            三.查詢   1.使用NSFetchedResultsController控制器   // 查詢結果控制器     NSFetchedResultsController *_fetchedResultsController;      2.監控managed object context對象的改變,報告給delegate   1  // 設置代理 2     _fetchedResultsController.delegate = self;     2.1當操作數據上下文的內容改變的時候,會自動調用抓取結果控制器的代理方法   1 #pragma mark 查詢結果控制器代理方法 2 - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 3 { 4     // 新增、修改、刪除 5     [self.tableView reloadData]; 6 }     3.創建控制器   一般來說,你會創建一個NSFetchedResultsController實例作為tableview的成員變量。初始化的時候,你提供四個參數:   1。 一個fetchrequest.必須包含一個sortdescriptor用來給結果集排序。   2。 一個managedobject context。 控制器用這個context來執行取數據的請求。   3。 一個可選的keypath作為sectionname。控制器用keypath來把結果集拆分成各個section。(傳nil代表只有一個section)   4。 一個cachefile的名字,用來緩沖數據,生成section和索引信息。   1  NSFetchRequest *reqest = _fetchedResultsController.fetchRequest;       1      1> 查詢請求 2      2> 數據庫上下文 3      3> 表格中用於分組的字段名 4      4> 緩存名稱 5      */ 6     _fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];               5.注意:一定要執行抓取請求,返回的數據在sections裡,這個數組中裝的都是遵守NSFetchedResultsSectionInfo這個協議的對象。通過numberOfObjects就能獲取一組有多少數據對象了。   1   return [_fetchedResultsController.sections[0] numberOfObject
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved