CoreData

原创 2016年08月30日 11:44:33

1.简介
Core Data 是 iOS5 之后才出现的一个框架,它提供了对象-关系映射 (ORM) 的功能,即能够将 OC 对象转化成数据,保存在 SQLite 数据库文件中,也能够将保存在数据库中的数据还原成 OC 对象。在此数据操作期间,我们不需要编写任何 SQL 语句

CoreData 本质是一个ORM框架 ORM Objective-Relational Mapping 这个映射就是我们的模型文件,一般 ORM 框架都用 XML 格式来映射 实体Entity+属性数据库表,列

托管对象(entity) —既不是单纯的 内存对象,也不是数据库中的具体的数据,它介于这两个状态之间的,我们叫他游离态的数据

CoreData 不能执行 SQL 语句 取而代之,操作的是对象, FMDB SQLite 可以直接执行 SQL 语句

2.CoreData 的使用
1>直接创建项目工程文件, 勾选 Use Core Data 选项, 此时会自动生成对应的文件, 以及一些必要的代码
这里写图片描述

项目创建好之后, 我们发现多了一个 __CoreData.xcdatamodeld 文件, 以及 AppDelegate 文件中多了一些代码
这里写图片描述

接下来添加实体
这里写图片描述

生成模型文件
这里写图片描述

勾选 CoreData 文件
这里写图片描述

勾选实体
这里写图片描述

创建好之后, 会生成这些模型文件
这里写图片描述

在控制器中, 存数据和写数据的代码:

存数据:

// 为了获取 appDelegate 中的上下文属性
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:appDelegate.managedObjectContext];

person.name = @"lcn";
person.age = @(20);

// 保存数据
[appDelegate.managedObjectContext save:nil];

取数据

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

// NSFetchRequest 请求对象
NSFetchRequest *request = [[NSFetchRequest alloc] init];

// 实体
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:appDelegate.managedObjectContext];
request.entity = entity;

// 谓词
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", @"lcn"];
request.predicate = predicate;

// 排序
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
request.sortDescriptors = @[sort];

NSArray *tempArr = [appDelegate.managedObjectContext executeFetchRequest:request error:nil];

[tempArr enumerateObjectsUsingBlock:^(Person *  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

    NSLog(@"%@: %@", obj.name, obj.age);
}];

2>但是在真正开发中, 我们可能一开始并不能确定我们是否要使用 CoreData, 当我们在后续中想要使用 CoreData 时, 很显然我们不能重新搭建一个项目, 所以就需要我们自己来编写对应的代码

创建一个工具类, 以及实体文件
这里写图片描述

LCNCoreDataManager.h 中的代码

/**
 *  单例
 */
+ (instancetype)shareManager;

/**
 *  管理对象的上下文
 */
@property (nonatomic,strong) NSManagedObjectContext *context;

LCNCoreDataManager.m 中的代码

+ (instancetype)shareManager {

static id _instance;

static dispatch_once_t once;
dispatch_once(&once, ^{

    _instance = [[self alloc] init];

});

return _instance;
}

#pragma mark - 上下文的懒加载
- (NSManagedObjectContext *)context {
    if (!_context) {

    // 加载模型文件  momd 为简写
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"Dog" withExtension:@"momd"];

    // 创建模型文件
    NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];

    // 创建协调器
    NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

    // 创建上下文
    _context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];

    // 把协调器传递给上下文
    [_context setPersistentStoreCoordinator:coordinator];

    // 数据库地址(要把文件名也拼接上)
    NSString *string = [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"Dog.db"];
    NSURL *pathUrl = [NSURL URLWithString:string];

    [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:pathUrl options:nil error:nil];
    }
    return _context;
}

然后接下来的过程就和上面一样了, 注意获取上下文的时候是通过我们自己的工具类获取, 上面的是通过 AppDelegate 获取

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

coreData增删改查Demo

  • 2015年06月10日 15:31
  • 121KB
  • 下载

CoreData实践(一)

在客户端的开发中,我们可能要轻量级的存储一些数据,此时最方便的想法就是使用SQLite。而在iOS平台下,我们可以使用苹果提供的CoreData框架。如何在项目中着手使用CoreData呢? (1)创...

CoreData ChildContext

  • 2015年06月01日 13:52
  • 568KB
  • 下载

简单的数据库操作coredata

  • 2015年07月20日 09:21
  • 70KB
  • 下载

(CoreData的使用,增删改查)

用过网易新闻客户端的朋友们都知道,获取新闻列表时有的时候他会请求网络有时候不会,查看某条新闻的时候再返回会标注已经查看的效果,接下来分析一下是如何实现的。 首先: 1、网易新闻...
  • brasbug
  • brasbug
  • 2014年10月21日 10:24
  • 284

coredata存储

  • 2014年11月16日 22:41
  • 150KB
  • 下载

CoreData数据存储demo

  • 2014年08月07日 15:42
  • 76KB
  • 下载

CoreData版本迁移(一)

轻量级迁移 符合下面情况的数据迁移为轻量级迁移: 1.添加、删除实体 2.修改原有实体的属性(增加、删除、修改) 适用场景:在版本迭代中为了满足新需求数据库的表结构可能会发生改变,这时就需要一个新...

CoreData学习入门

  • 2016年08月17日 11:36
  • 42KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CoreData
举报原因:
原因补充:

(最多只允许输入30个字)