CoreData的简单使用

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;
    
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值