• 注册
当前位置:1313e > 默认分类 >正文

数据持久化四之CoreData

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

CoreData是苹果提供的数据持久化的一种,实质还是通过数据库存储数据.但是操作数据的时候不再需要sql语句,核心文件和类:

1.模型文件:也就是.xcdatamodeld,相当于数据库文件

2.实体:相当于数据库的表

3.实体类:表存储的对象的类

4.上下文:关联模型文件和实际生成的数据库文件;

使用的步骤

1.创建一个模型文件:(创建工程use coredata就行)

2.创建实体,也就是创建表

3.创建实体类

4.生成上下文,(操作上下纹也就是操作数据库)

ViewController.m的代码如下:

 

 

#import "ViewController.h"

#import "AppDelegate.h"

#import "Student.h"

@interface ViewController ()

 

 

//上下文

@property (nonatomic,strong) NSManagedObjectContext *context;

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    //插入数据

  //  [self insertData];

    

    //数据查询

    //[self selectData];

    

    //删除数据

    //[self deleteData];

    

    //更新数据

    [self updataData];

    NSLog(@"%@",NSHomeDirectory());

    

    

}

#pragma mark - 更新数据

- (void)updataData{

    //1.查询到需要更新的数据

    NSFetchRequest *fetchrequest = [[NSFetchRequest alloc]

                    initWithEntityName:@"Student"];

    

    //创建查询对象

    NSPredicate *pre = [NSPredicate predicateWithFormat:@"score<70"];

    //设置查询条件

    fetchrequest.predicate = pre;

    //查询

    NSArray *array = [self.context executeFetchRequest:fetchrequest error:nil];

    

 

    

    //2.更新属性

    for (Student *stu in array) {

        

        stu.score = @60;

       

    }

   

    //3.保存数据库

    [self.context save:nil];

    

}

#pragma mark - 删除数据

- (void)deleteData{

    

    //1.查询要删除的数据

    NSFetchRequest *fetchrequest = [[NSFetchRequest alloc]

                                    initWithEntityName:@"Student"];

    //创建查询对象

    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name = '小明'"];

    //设置查询条件

    fetchrequest.predicate = pre;

    //查询

    NSArray *array = [self.context executeFetchRequest:fetchrequest error:nil];

   

    //2.删除数据

    for (Student *stu in array) {

        

        [self.context deleteObject:stu];

    }

    

    

    //3.保存数据库

    [self.context save:nil];

    

    

}

 

 

#pragma mark - 数据查询

- (void)selectData{

    

    //1.创建一个查询对象

    //参数:实体名:相当于表名

    NSFetchRequest *fetchrequest = [NSFetchRequest fetchRequestWithEntityName:@"Student"];

    //2.查询数据

    //返回值:查询结果数据

    NSArray *array = [self.context executeFetchRequest:fetchrequest error:nil];

    

    for (Student *stu in array) {

        [stu show];

    }

    

    //==========按条件查询==================

    //1.创建条件对象

    //条件:成绩大于80

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"score > 80"];

    

    NSPredicate *pred2 = [NSPredicate predicateWithFormat:@"score > %@",@90];

    

    NSPredicate *pred3 = [NSPredicate predicateWithFormat:@"%K > %@",@"age",@15];

    

    //2.设置查询对象的条件

    fetchrequest.predicate = pred3;

    

    //3.查询数据

    NSArray *array2 = [self.context executeFetchRequest:fetchrequest error:nil];

    for (Student *stu in array2) {

        [stu show];

    }

    

    //===============对查询结果进行排序======================

    //1.创建排序对象

    //参数1:按哪个属性进行排序

    //参数2:是否升序

    NSSortDescriptor *desc = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];

    NSSortDescriptor *desc1 = [NSSortDescriptor sortDescriptorWithKey:@"score" ascending:NO];

    

    //2.设置查询的排序

    fetchrequest.sortDescriptors = @[desc,desc1];

    

    //3.查询数据

   NSArray *array3 =   [self.context executeFetchRequest:fetchrequest error:nil];

    for (Student *stu in array3) {

        [stu show];

    }

    

    

    

}

 

 

#pragma mark - 数据的插入

-(void)insertData{

    

    //=============插入单条数据======================

    //1.通过实体创建一个学生对象

    

    //参数1:实体名(表名)

    //参数2:上下文(数据库)

    Student *student = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:self.context];

    

    //2.设置学生对象的属性

    student.name = @"小明";

    student.age = @20;

    student.score = @90;

    

    //保存数据库

    [self.context save:nil];

    

    

    

    //========插入多条数据===========

    

    for (int i =0 ; i<20; i++) {

        //1.创建对象

        Student *stu = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:self.context];

        //2.设置属性

        stu.name = [NSString stringWithFormat:@"name%d",i];

        stu.age = [NSNumber numberWithInt:arc4random() % 10 +10];

        stu.score = [NSNumber numberWithFloat:arc4random() % 100];

        

        

    }

    //3.保存数据库

    [self.context save:nil];

    

 

}

 

 

#pragma  mark - 懒加载

- (NSManagedObjectContext *)context{

    

    if (_context == nil) {

       

        //1.拿到当前应用程序的代理

        //拿到当前应用程序对象

        //生成上下文

        AppDelegate *delegate =  [UIApplication sharedApplication].delegate;

        _context = delegate.managedObjectContext;

        

        

        

        

    }

    return _context;

}

 

 

@end

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/luhoney/blog/702895

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录