实现效果 :
CoreData的上下文编辑包括:添加, 删除,查询和修改几个方面.
<b>实现效果: 在页面上添加4个button, 分别触发以上四个不同的事件.</b>
第一部分: 导入的相关文件,及设置上下文属性
//导入CoreData框架
#import <CoreData/CoreData.h>
//导入AppDelegate,因为我们需要用到他的上下文
#import "AppDelegate.h"
//导入实体类
#import "Student.h"
@interface ViewController ()
{
AppDelegate *appDelegate;
}
@property (strong, nonatomic)NSManagedObjectContext *mangaedObjectContext;
@end
@implementation ViewController
第二部分: 获取上下文, 布局页面
- (void)viewDidLoad {
[super viewDidLoad];
//获取上下文
appDelegate = [UIApplication sharedApplication].delegate;
self.mangaedObjectContext = appDelegate.managedObjectContext;
//给按钮添加标题
NSArray *array = @[@"插入", @"删除", @"修改", @"查询"];
//利用for循环初始化四个按钮, 并分别设置不同的tag值
for (int i = 0; i < array.count; i++) {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(30+i*60, 100, 40, 30);
[button setTitle:array[i] forState:UIControlStateNormal];
[button addTarget:self action:@selector(button:) forControlEvents:UIControlEventTouchUpInside];
[button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
button.tag = 1000 + i;
[self.view addSubview:button];
}
}
第三部分: 在button的事件中写一个分支语句, 根据用户的点击触发不同的方法
- (void)button:(UIButton *)button{
switch (button.tag) {
case 1000:
//执行插入
[self insert];
break;
case 1001:
//执行删除
[self delete];
break;
case 1002:
//执行修改
[self update];
break;
case 1003:
//执行查询
[self select];
break;
default:
break;
}
}
第四部分: 下面我们来分别实现CoreData的上下文操作
添加:
1.创建实体描述类(指定描述的类 , 指定在哪一个上下文中插入)
2.创建一个实体类对象(指定使用的实体描述对象)
3.对实体类对象进行赋值操作
4.利用上下文,save保存实体
*实现添加方法
- (void)insert{
//第一步: 创建实体描述
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:appDelegate.managedObjectContext];
//第二步: 创建实体类对象(创建实体 + 指定实体描述 + 添加到上下文)
Student *student = [[Student alloc] initWithEntity:entity insertIntoManagedObjectContext:appDelegate.managedObjectContext];
//赋值
student.name = @"蹦沙卡拉卡";
student.age = @"20";
student.gender = @"女";
//第三步: 保存上下文
[appDelegate.managedObjectContext save:nil];
//打印沙盒路径, 访问数据库
NSLog(@"path = %@", NSHomeDirectory());
}
查询:
1.创建实体描述类(可选)
2.创建查询请求(如果实体没有实体描述类则在创建请求的时候需要用实体描述来初始化)
3.利用上希望,execute执行查询操作
4.存储到数组中
- (void)select{
//第一步: 创建实体描述类
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:appDelegate.managedObjectContext];
//第二步: 创建请求
NSFetchRequest *request = [[NSFetchRequest alloc] init];
//第三步: 确定建立请求的类
[request setEntity:entity];
//第四步: 执行请求,将返回结果放到数组中
NSArray *array = [appDelegate.managedObjectContext executeFetchRequest:request error:nil];
for (Student *stu in array) {
NSLog(@"name = %@, age = %@, gender = %@", stu.name, stu.age, stu.gender);
}
}
删除:
1.创建实体描述类(指定描述的类 , 指定在哪一个上下文中插入)
2.创建请求(相当于查询操作)
3.给请求指定被请求的实体
4.设置条件(谓词)
5.给请求指定请求时的条件
6.利用上下文,执行请求, 并将结果保存到数组中用来操作
7.如果得到请求得到结果, 那么遍历结果数组利用上下文删除得到的对象
8.保存上下文
- (void)delete{
//第一步: 创建实体描述类
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:appDelegate.managedObjectContext];
//第二步: 创建请求
NSFetchRequest *request = [[NSFetchRequest alloc] init];
//第三步: 确定建立请求的类
[request setEntity:entity];
//第四步: 设置删除条件
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@",@"蹦沙卡拉卡"];
//第五步: 确定请求条件
[request setPredicate:predicate];
//第六步: 利用上下文执行请求, 并将结果返回给数组
NSArray *array = [appDelegate.managedObjectContext executeFetchRequest:request error:nil];
if (array.count) {
for (Student *stu in array) {
//利用上下文对象删除
[appDelegate.managedObjectContext deleteObject:stu];
}
//保存上下文
[appDelegate.managedObjectContext save:nil];
}
}```
更新:
1.创建实体类
2.创建请求
3.确定建立请求的实体类
4.设置条件
5.确定请求的条件
6.利用上下文执行请求, 并将结果放到数组中
7.遍历数组执行修改操作
eight. 保存上下文
```code
- (void)update{
//1. 读取实体类
NSEntityDescription *entity = [NSEntityDescription entityForName:@"People" inManagedObjectContext:appDelegate.managedObjectContext];
//2. 建立请求
NSFetchRequest *request = [[NSFetchRequest alloc] init];
//3. 确定建立请求的类
[request setEntity:entity];
//4. 设置条件
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age = %@", @"16"];
//5. 设置请求的条件
[request setPredicate:predicate];
//6. 遍历操作
NSArray *array = [appDelegate.managedObjectContext executeFetchRequest:request error:nil];
if (array.count) {
for (Student *stu in array) {
//执行修改
stu.name = @"小白";
}
[appDelegate.managedObjectContext save:nil];
NSLog(@"修改成功");
}else{
NSLog(@"修改失败");
}
}```