文档章节

IOS开发之coreData

鹿微微鹿
 鹿微微鹿
发布于 2016/05/05 21:27
字数 838
阅读 28
收藏 1

注意在使用coreData的时候,注意创建工程的时候要勾选use core Data这一个选项,然后操作如下图:添加实体和实体类,里面和操作数据库的步骤是一样的。

然后点击新建,点击如蓝色部分的新建类:

//coreData是苹果提供的数据本地化的一种,实质还是通过数据库存储数据

//但是操作数据的时候不需要sql语句

//核心文件和类

//1.模型文件:(后缀是.xcdatamodeld,相当于数据库文件

//2.实体:相当于表

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

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



//coreData的使用步骤

//1.创建一个模型文件;(创建工程点use coredata就创建了)

//2.创建实体,相当于创建表

//3.创建实体类

//4.生成上下文:(操作上下文就相当于操作数据库)

#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











© 著作权归作者所有

共有 人打赏支持
鹿微微鹿
粉丝 8
博文 116
码字总数 71882
作品 0
程序员
私信 提问
Core Data 学习笔记 常用链接整理

目录 Core Data 学习笔记(一)框架简介 Core Data 学习笔记(二)被管理对象模型 Core Data 学习笔记(三)被管理对象 Core Data 学习笔记 应用示例 Core Data 学习笔记 常用链接整理 文章 ...

灰大羊
2015/07/31
0
0
iOS开发笔记(九)— 数据库、Crash、内存问题分析

前言 分享iOS开发中遇到的问题,和相关的一些思考,本次内容包括:UIKit的iOS11问题、数据库问题定位、线上Crash处理、内存问题分析。 正文 1、iOS 11的UITabbar的高度异常 问题描述:iOS 1...

落影loyinglin
2018/08/26
0
0
【逐渐提高】ios 代码库 集合类

系统基础库 Category/Util sstoolkit 一套Category类型的库,附带很多自定义控件 功能不错~ BlocksKit 将Block风格带入UIKit和Founcation cocoa-helpers 一些Cocoa的扩展 2年前的工程 Coconu...

创意总监
2014/08/30
0
1
GitHub 上排名前 100 的 Objective-C 项目简介

主要对当前 GitHub 排名前 100 的项目做一个简单的简介, 方便初学者快速了解到当前 Objective-C 在 GitHub 的情况. 若有任何疑问可通过微博@李锦发联系我 项目名称 项目信息 1. AFNetworkin...

oschina
2015/04/11
33.2K
28
【读书笔记】iOS-使用钥匙串保护数据

一,将应用从设备上删除时,并不会删除其钥匙串项,这使得调试工作困难得多。模拟器有一个Reset Contents and Settings选项,可用于将钥匙串项移除。因此,强烈建议在模拟器上确定Keychain应...

菜鸟and小白
2018/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

毕业季,我的Linux求职之路

秋招终于告一段落了,本硕的七年求学之路也快画上了句号。回首求职的这一段日子,痛苦并快乐着。感谢所有陪伴着我走过这一段路程的同学,所有的辛酸都值得铭记。求职的过程中在网上看了很多的...

linux-tao
36分钟前
0
0
Mybatis动态语句,if test字符串不用进行null判断

描述:根据creator列进行过滤获取image表的数据。 代码如下: @Select("<script>" + " select * from image " + " <where>" + " <if test='isAllCreator != 1'> ......

Coder顾
55分钟前
0
0
写了2年python,知道 if __name__ == '__main__' 什么意思吗?

相信刚接触Python的你一定有过如此经历,把所有的代码都写在 if __name__ == '__main__'下,因为有人告诉你,这样比较符合 Pythonista 的代码风格。 殊不知这段代码的意义并不是一定要存在于...

上海小胖
今天
5
0
zkong笔记18

这两天的主要工作: Elasticsearch初探 接受ESL的超管功能 ERP开源系统调研

莫在全
今天
3
0
tpcc-mysql的安装和使用

# tpcc-mysql的安装和使用 前言 公司要做Mysql方面性能调优,大概浏览一下Mysql一些参数设置后,想开始尝试进行调整测试。但发现一个问题,测试缺乏标准。所以需要一些基准测试标准或者工具。...

紫暘
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部