OC CoreData简单使用

  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

猜你喜欢

转载自blog.csdn.net/weixin_33915554/article/details/94287707