iOS大典之Core Data


Core Data


用来保存应用数据


这里写图片描述



创建Single View工程,
要勾上 Use Core Data 的复选框,

创建数据模型 :
点击选中CoreData.xcdatamodeld, 然后commond + N, 出来数据模型编辑界面,点击面板左下方的加号图标(Add Entity), 创建个Entity实体, 双击名字可以修改

添加属性 :
点加号, 输入名字, 并更改type


补充下基本信息:

创建数据模型: 使用 Core Data . 创建实体(Entity), 在数据模型编辑器中, 然后用代码创建托管对象(managed object).

实体和托管对象的关系, 约等于 类和类的实例 的关系

特性 Attributes 关系 Relationships 提取属性 Fetched Properties

实体的属性:
1 . 特性; 用来保存数据, 比如:年龄,姓名,三围,
2 . 关系; 是一对一, 还是一对多. 如: 偶像实体和粉丝实体, 偶像和粉丝的关系就用到这个属性了, 偶像到粉丝的关系是一对多, 粉丝到偶像是一对一
3 . 提取属性; 关系的备胎. 用提取属性可以创建个提取时被评估的查询, 从而确定对象属于哪个这个关系


代码如下 :


属性声明 被管理对象上下文(临时数据库)

#import "AppDelegate.h"
@property (nonatomic, strong) NSManagedObjectContext *managerContext;

添加数据

// 创建实体描述
    NSEntityDescription *studentDE = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managerContext];

    for (int i = 0; i < 10; i ++ ) {
        // 根据实体描述创建实体
        Student *student = [[Student alloc] initWithEntity:studentDE insertIntoManagedObjectContext:self.managerContext];
        // 给实体赋值
        student.name = [NSString stringWithFormat:@"君君%d号", i];
        student.age = [NSNumber numberWithInt:(i + 5)];
        student.sex = [NSString stringWithFormat:@"男"];

    }
    NSError *error = nil;
    // 数据同步
    [self.managerContext save:&error];
    if (!error) {
        NSLog(@"存储成功");
    }

查询数据

 // 从实体中查询
    NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Student"];
    // 实体描述
    NSEntityDescription *studentDE = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managerContext];
    //  设置查询实体
    request.entity = studentDE;



    // 设置排序, yes升序, no降序
    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES];
    request.sortDescriptors = @[sort];

    // 设置查询 根据指定条件查询
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", @"君君8号"];
    request.predicate = predicate;
    // 模糊查询,
    NSPredicate *predicatee = [NSPredicate predicateWithFormat:@"name CONTAINS %@", @"8"];
    request.predicate = predicatee;
    // 头尾查询
    NSPredicate *predicateee = [NSPredicate predicateWithFormat:@"name LIKE %@", @"君君*"];
    request.predicate = predicateee;



    // 数组接受查询的数据
    NSArray *array = [self.managerContext executeFetchRequest:request error:nil];
    // 便利数组 取出数据打印
    for (Student *student in array) {
        NSLog(@"姓名 : %@, 年纪 : %@, 性别 : %@", student.name, student.age, student.sex);
    }

修改数据

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Student"];
    NSEntityDescription *studentDE = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managerContext];
    request.entity = studentDE;
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", @"君君8号"];
    request.predicate = predicate;


    NSArray *array = [self.managerContext executeFetchRequest:request error:nil];
    for (Student *student in array) {
        student.age = [NSNumber numberWithInt:44];
        student.sex = @"nv";
        student.name = @"君君1000号";
        NSLog(@"姓名 : %@, 年纪 : %@, 性别 : %@", student.name, student.age, student.sex);
    }
    NSError *error = nil;
    // 数据同步
    [self.managerContext save:&error];
    if (!error) {
        NSLog(@"修改成功");
    }

删除数据

 NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Student"];
    NSEntityDescription *studentDE = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managerContext];
    request.entity = studentDE;
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", @"君君9号"];
    request.predicate = predicate;

    NSArray *array = [self.managerContext executeFetchRequest:request error:nil];
    // 便利数组 取出数据打印
    for (Student *student in array) {
        [self.managerContext deleteObject:student];
    }
    NSError *error = nil;
    // 数据同步
    [self.managerContext save:&error];
    if (!error) {
        NSLog(@"删除成功");
    }

over


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值