关于iOS开发的CoreData

     关于IOS开发这块儿,苹果公司从前几年的全球开发者大会中一直在强调CoreData数据持久化这一块儿。使用coreData可以节省你50%到70%的代码量来管理数据库,你可以不用懂sql语句就可以很方便的通过数据NSManagerObjectContext上下文来通过协调器来管理数据库里面的数据,这里面的数据增加,删除,修改和查询全部交给协调器来管理这些数据。


                                                                                CoreData的原理我大概说一下

           

    //初始化 托管对象上下文

        // context 代码和 CoreData 的中间件

        //-----NSManagedObjectContext ---》》增删改查

        //          |----------|

        //         代码        协调器

        //                     /    \

        //                  概念模型  物理存储

        

        

        //初始化持久化存储位置

        //                         __Model   __xxx.Sqlite

        //      协调器,CoreData 概念模型 物理存储的中间件


下面就是我的一个小Demo代码片段,供大家学习和参考


#import <Foundation/Foundation.h>

#import <CoreData/CoreData.h>



//获取 数据模型

static NSManagedObjectModel * model()

{

    static NSManagedObjectModel * model;

    if (model!=nil) {

        return model;

    }

    //1.初始化 数据模型

    model = [[NSManagedObjectModel alloc]init];

    //2.初始化 实体对象

    NSEntityDescription * personEn = [[NSEntityDescription alloc]init];

    //2.1设置实体对象的名称

    [personEn setName:@"Person"];

    //2.2设置实体对象对应的类名称

    [personEn setManagedObjectClassName:@"Person"];

    

    //3.初始化 name,age属性

    NSAttributeDescription * nameDesc = [[NSAttributeDescription alloc]init];

    //3.1设置属性名

    [nameDesc setName:@"name"];

    //3.2设置属性类型

    [nameDesc setAttributeType:NSStringAttributeType];

    //3.3设置属性默认值

    [nameDesc setDefaultValue:@"无名氏"];

    

    NSAttributeDescription * ageDesc = [[NSAttributeDescription alloc]init];

    [ageDesc setName:@"age"];

    [ageDesc setAttributeType:NSInteger64AttributeType];

    [ageDesc setDefaultValue:@0];

    //4.设置实体的属性

    [personEn setProperties:[NSArray arrayWithObjects:nameDesc,ageDesc, nil]];

    //5.将实体合成到数据模型中

    [model setEntities:@[personEn]];

    

    return model;

}


//字面量

//    NSDictionary* dic =@{

//    @"key": @"value",

//    @"key2":@"value2",

//    @"dic":@{

//            @"dic1": @"value1"

//            }

//    };

//    //可变 copy ,将不可变对象 copy 为可变对象

//    [dic mutableCopy];


int main(int agrc,char * argv[])

{

    //.持久化设置

    //初始化持久化存储对象

    NSPersistentStoreCoordinator * coor = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model()];

    //设置持久化存储对象

    NSURL * url = [NSURL fileURLWithPath:@"/Users/cora1n/Desktop/test.sqlite"];

    //指定 持久化存储类型

    [coor addPersistentStoreWithType:NSSQLiteStoreType

                       configuration:nil

                                 URL:url

                             options:nil error:nil];

    

    

    //.初始化托管对象上下文

    NSManagedObjectContext * context = [[NSManagedObjectContext alloc]init];

    //1.设置托管对象上下文的存储坐标

    [context setPersistentStoreCoordinator:coor];

    

    //2.写入操作

    

    //2.1 从上下文中获取实体对象

    NSEntityDescription * person = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];

    //2.2 通过实体对象 初始化托管对象, 插入到 托管对象上下文中

    NSManagedObject * personMO = [[NSManagedObject alloc]initWithEntity:person insertIntoManagedObjectContext:context];

    //2.2.1 设置托管对象的 name, age 属性

    [personMO setValue:@"zhangsan" forKey:@"name"];

    [personMO setValue:@22 forKey:@"age"];

    

    //持久化!!!

    [context save:nil];

    

    

    //3.读取操作

    //初始化 抓取请求 ,指定 抓取的实体名称

    NSFetchRequest * request= [[NSFetchRequest alloc]initWithEntityName:@"Person"];

    NSError * err;

    NSArray * persons;

    

    @try {

        //代码可能出现异常

        persons =[context executeFetchRequest:request error:&err];

    }

    @catch (NSException *exception) {

        //抓取异常,并进行处理

        NSLog(@"%@",exception);

    }

    @finally {

        NSLog(@"最终执行代码");

    }

    

    //执行 抓取请求

    if (err) {

        NSLog(@"%@",err);

    }

    for (id person in persons) {

        NSLog(@"%@",person);

    }

    //Entity       

    //ManagedObject 记录

    /*<NSManagedObject: 0x100404680> 

     (

     entity: Person; 

     id: 0x80000b <x-coredata://E530278B-EDA4-426D-A7C2-0936C5DB1ABA/Person/p2> ;

     data: {

        age = 22;

        name = zhangsan;

     }

     )

     */

    

    

    

    

    

    

    

    //0 代表正常结束

    return 0;

}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值