1、Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何SQL语句.
我们先来了解下Core Data设计到几个主要的概念
(1)NSManagedObjectContext(被管理的数据上下文)
操作实际内容(操作持久层)
作用:插入数据、查询数据、删除数据
(2)NSManaedObjectModel(被管理的数据模型)
数据库所有表格或者数据结构,包含各实体的定义信息
(3)NSPersistentStoreCoordinator(持久化存储助理)
相当于数据库的连接器
作用:设置数据存储的名字、位置、存储方式
(4)NSManagedObject(被管理的数据记录)
相当于数据库中的表格记录
(5)NSFecthRequest(获取数据的请求)
相当于查询语句
(6)NSEntityDescription(实体结构)
相当于表格结构
2、介绍完基本的概念,下面展示项目的操作过程
(1)首先创建一个新的项目,勾选上coreData
(2)增加实体
(3)设置实体中的属性和属性类型
(4)创建和实体对应的model
(4)coreData中的增删改差的具体实现
#import "ViewController.h"
#import <CoreData/CoreData.h>
#import "Person.h"
@interface ViewController (){
NSManagedObjectContext *_context;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self initContext];
[self deletePerson];
[self findPerson];
// [self updatePerson];
// [self findPerson];
}
//删
-(void)deletePerson{
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
//过滤
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age = %@",@(25)];
request.predicate = predicate;
NSArray *presons = [_context executeFetchRequest:request error:nil];
for (Person *person in presons) {
[_context deleteObject:person];
}
[_context save:nil];
}
//改
-(void)updatePerson{
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
//过滤
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age > %@",@(26)];
request.predicate = predicate;
NSArray *persons = [_context executeFetchRequest:request error:nil];
for (Person *person in persons) {
person.name = @"xiaohong";
person.age = @(25);
}
[_context save:nil];
}
//查
-(void)findPerson{
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
//排序
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
request.sortDescriptors = @[descriptor];
// //过滤
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age > %@",@(26)];
// request.predicate = predicate;
NSArray *persons = [_context executeFetchRequest:request error:nil];
for (Person *peson in persons) {
NSLog(@"name = %@,age = %@",peson.name,peson.age);
}
}
//增
-(void)insertPeson{
Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:_context];
person.name = @"xiaoming";
person.age = @(27);
[_context save:nil];
}
-(void)initContext{
//初始化上下文
NSManagedObjectContext *context = [[NSManagedObjectContext alloc]init];
NSManagedObjectModel *objectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
//设置持久化存储调度器
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:objectModel];
NSString *document = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *sqliteName = @"coredata.sqlite";
NSError *error = nil;
NSString *sqlitePath = [document stringByAppendingPathComponent:sqliteName];
//告诉coredata要用一个model保存一个coredata.sqlite文件
[coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:&error];
context.persistentStoreCoordinator = coordinator;
_context = context;
}