注意在使用coreData的时候,注意建立工程的时候要勾选use core Data这一个选项,而后操做以下图:添加实体和实体类,里面和操做数据库的步骤是同样的。
sql
而后点击新建,点击如蓝色部分的新建类:数据库
//coreData是苹果提供的数据本地化的一种,实质仍是经过数据库存储数据dom
//可是操做数据的时候不须要sql语句fetch
//核心文件和类atom
//1.模型文件:(后缀是.xcdatamodeld),至关于数据库文件spa
//2.实体:至关于表.net
//3.实体类:表存储的对象的类3d
//4.上下文:关联模型文件和实际生成的数据库文件;代理
//coreData的使用步骤code
//1.建立一个模型文件;(建立工程点use coredata就建立了)
//2.建立实体,至关于建立表
//3.建立实体类
//4.生成上下文:(操做上下文就至关于操做数据库)
#import "ViewController.h"
#import "AppDelegate.h"
#import "Student.h"
@interface ViewController ()
//上下文
@property (nonatomic,strong) NSManagedObjectContext *context;
@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