CoreData是苹果提供的一种ORM(对象型关系数据库),类似于JavaEE轻量级架构中得Hibernate。这里总结一下CoreData的使用流程。
1.创建Model
2.添加实体,同时添加属性
3.添加完属性后,即可以生成被管理模型
4.设计数据库管理类(WKDataManager)
WKDataManager.h
1 #import <Foundation/Foundation.h> 2 3 @interface WKDataManager : NSObject 4 5 /** 6 * 单例 7 * 8 * @return 9 */ 10 + (instancetype) sharedDataManager; 11 12 /** 管理上下文 */ 13 @property (strong, nonatomic) NSManagedObjectContext *context; 14 @end
1 #import "WKDataManager.h" 2 #import <CoreData/CoreData.h> 3 #import "NSString+docDir.h" 4 static WKDataManager *_instance; 5 6 @implementation WKDataManager 7 8 + (id)allocWithZone:(struct _NSZone *)zone 9 { 10 static dispatch_once_t onceToken; 11 dispatch_once(&onceToken, ^{ 12 _instance = [super allocWithZone:zone]; 13 }); 14 return _instance; 15 } 16 17 + (instancetype)sharedDataManager 18 { 19 if (_instance == nil) { 20 _instance = [[WKDataManager alloc] init]; 21 } 22 return _instance; 23 } 24 25 - (id)init 26 { 27 if (self = [super init]) { 28 //打开数据库 29 [self openDB]; 30 } 31 return self; 32 } 33 /** 34 SQLite 35 36 1. openDB就可以开数据库,如果有,直接打开 37 如果没有,新建之后,再打开 38 2. createTable 39 40 ================================================= 41 CoreData的步骤 42 1. 指定数据模型,将所有图形化设计的模型合而为一 43 2. 使用模型实例化存储调度,准备开始建表了 44 3. 指定数据库文件的准确位置 45 46 再次运行时: 47 1> 如果数据库存在,就直接打开 48 2> 如果不存在,创建之后再打开! 49 3> 如果修改了模型文件,同时数据库已经存在,运行会崩溃! 50 51 假设程序已经运行过,内部数据已经存在,提示我们选择数据的处理方式 52 1> 直接删除旧数据 53 2> 使用数据库工具,将原有数据导入到新的数据库中! 54 55 从而保证用户的数据不会丢失! 56 57 提示:此方法如果记不住,以后直接拷走! 58 */ 59 60 61 - (void)openDB 62 { 63 //1.合并模型 64 NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil]; 65 //2.创建NSPersistentStoreCoordinator(持久化存储助理) 66 NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; 67 68 //2.1.数据库名 69 NSString *dbName = @"my.db"; 70 //2.2.数据库URL 71 NSURL *url = [dbName appendDocumentDirURL]; 72 NSLog(@"%@", url); 73 NSError *error = nil; 74 //3.添加持久化存储的数据库 75 [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error]; 76 if (error == nil) { 77 NSLog(@"数据库建立成功"); 78 //3.1.创建上下文 79 self.context = [[NSManagedObjectContext alloc] init]; 80 _context.persistentStoreCoordinator = store; 81 }else{ 82 NSLog(@"数据库创建失败"); 83 } 84 } 85 @end
5.用NSFetchedResultsController来读取CoreData数据
5.1. NSFetchedResultsControllers创建
1 // 查询请求(Person为实体类名) 2 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; 3 4 NSSortDescriptor *sordDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; 5 6 // 按照用户姓名升序排序 7 request.sortDescriptors = @[sordDescriptor]; 8 /** 9 参数: 10 1> 查询请求 11 2> 数据库上下文 12 3> 表格中用于分组的字段名 13 4> 缓存名称 14 */ 15 NSFetchedResultsController fetchedResultsController = [[NSFetchedResultsController alloc ]initWithFetchRequest:request managedObjectContext:[WKDataManager sharedDataManager].context sectionNameKeyPath:nil cacheName:nil]; 16 // 设置代理 17 fetchedResultsController.delegate = self;
5.2.NSFetchedResultsControllers执行查询
/执行请求抓取数据 NSError *error = nil; if ([fetchedResultsController performFetch:&error]) { NSLog(@"查成功"); }else { NSLog(@"查询失败 %@", error.localizedDescription); }
5.3. NSFetchedResultsControllers取出每个分组中得数据数
//获取分区内的记录数 [_fetchedResultsController.sections[0] numberOfObjects];
5.4. NSFetchedResultsControllers 根据IndexPath取出查询结果
//用indexPath获取查询到的数据 Person *person = [_fetchedResultsController objectAtIndexPath:indexPath];
转载于:https://www.cnblogs.com/pretty-guy/articles/4105005.html