国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS-CoreData數據庫管理利器!

2019-11-14 20:44:46
字體:
來源:轉載
供稿:網友

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.創建連接數據庫                                  

  1. 首先需要創建一個操作數據庫的上下文。NSManagedObjectContext
  2. 操作數據庫的上下文需要設置一個調度者屬性,這個調度者是用來將圖形化建立的模型和數據庫聯系起來。
  3. 給調度者添加一個需要聯系的數據庫。

  

 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 *)controller3 {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] numberOfObjects];

 

 

                                                              清澈Saup 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 任丘市| 汉中市| 锡林郭勒盟| 巧家县| 米泉市| 商洛市| 琼海市| 乡城县| 墨竹工卡县| 壶关县| 颍上县| 灵丘县| 湟中县| 越西县| 开原市| 九寨沟县| 孟村| 西丰县| 东港市| 商河县| 合江县| 黄龙县| 九江县| 怀集县| 紫云| 中卫市| 宝坻区| 呼图壁县| 雷波县| 温州市| 海门市| 香港| 枝江市| 石门县| 宣城市| 兴仁县| 海兴县| 天水市| 南昌市| 于都县| 大石桥市|