iOS开发:coredata的简单使用

来源:互联网 发布:mac一键翻墙免费2016 编辑:程序博客网 时间:2024/05/17 06:16

coredata

一、coredata简介

用来保存数据,是基于Sqlite的封装将数据保存到一个数据库文件。它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何SQL语句.


二、创建coredata的流程


第一步:创建coredata的数据模型文件



创建完成之后会生成一个.xcdatamodeld文件


注:一个数据库对应一个上下文


打开文件添加表单文件



注:一个表单对应的是一个模型文件


若要做多表关联参照下列方法







第二步:创建实体对象文件


创建管理对象文件




选择数据模型文件





选择表单文件





创建完成后会生成以下文件,到此表单文件跟Employee就建立了对应关系。存储在数据库Employee表单的就是Employee对象。






第三步:代码关联

#pragma mark--创建上下文

-(void)setUpContext{

   

//1.创建管理对象-- nil代表关联所有的模型文件。

#if 1

    NSManagedObjectModel * model = [NSManagedObjectModelmergedModelFromBundles:nil];

#else

NSURL * modelUrl = [[NSBundlemainBundle]URLForResource:namewithExtension:@"momd"];

    NSManagedObjectModel * model = [[NSManagedObjectModelalloc]initWithContentsOfURL: modelUrl];

#endif    

//2.创建数据库文件--构造数据库存储路径

#if 1

    NSString * doc = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[0];

   NSString * sqlitePath = [docstringByAppendingPathComponent:@"company.sqlite"];   

#else

    NSString * sqlitePath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/company.sqlite"];    

#endif

   NSURL * url = [NSURLfileURLWithPath:sqlitePath];

   NSError *error =nil;

   

//3.创建协调器--模型管理和数据库

    

    NSPersistentStoreCoordinator * coordinator = [[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:model];

    

   //存储数据库的名字

    [coordinatoraddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:urloptions:nilerror:&error];

    

//4.创建上下文

    NSManagedObjectContext * context = [[NSManagedObjectContextalloc]init];

   self.context = context;

    self.context.persistentStoreCoordinator  = coordinator;   

}



#pragma mark—

- (IBAction)addEmployee:(id)sender {

    //创建一个员工

    Employee * emp1 = [NSEntityDescriptioninsertNewObjectForEntityForName:@"Employee"inManagedObjectContext:self.context];

    emp1.name =@"wangwu";

    emp1.age =@(16);

    emp1.height =@(1.6);

    

   //通过上下文更新数据库

   NSError * error =nil;

    [self.contextsave:&error];

}


#pragma mark—

- (IBAction)readEmployee:(id)sender {

   //创建一个取得请求对象

    NSFetchRequest * request = [NSFetchRequestfetchRequestWithEntityName:@"Employee"];

#if 0

       //1.条件查找

        request.predicate = [NSPredicate predicateWithFormat:@"name=%@ AND age=%@",@"zhangsan",@(17)];

        request.predicate = [NSPredicate predicateWithFormat:@"name=%@ OR age>%@",@"zhangsan",@(17)];

        request.predicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH%@",@"zhang"];

        request.predicate = [NSPredicate predicateWithFormat:@"name CONTAINS%@",@"ang"];

        request.predicate = [NSPredicate predicateWithFormat:@"name like%@",@"*ang*"];

        


#elseif

       //2.排序

        NSSortDescriptor * sort = [NSSortDescriptor sortDescriptorWithKey:@"height" ascending:YES];

        request.sortDescriptors =@[sort];

#elseif

       //3.分页查询--每页显示5条数据

        request.fetchOffset =0;

        request.fetchLimit =5;      

#endif



    //读取信息

   NSError * error =nil;

   NSArray * emps = [self.contextexecuteFetchRequest:requesterror:&error];

   for (Employee * empin emps) {


      NSLog(@"age = %@,name = %@,height = %@",emp.age,emp.name,emp.height);

    }

      

}


#pragma mark--

-(void)deleteData{

    

   //查找要删除的内容

    NSFetchRequest * request = [NSFetchRequestfetchRequestWithEntityName:@"Employee"];

    //查找条件

    request.predicate = [NSPredicatepredicateWithFormat:@"name=%@",@"zhangsan"];

    

    //读取出内容

   NSArray * emps = [self.contextexecuteFetchRequest:requesterror:nil];

    

    //删除内容

   for (Employee * empin emps) {

        [self.contextdeleteObject:emp];

    }

    //同步数据库

    [self.contextsave:nil];

}


#pragma mark--

-(void)upDateData{

    NSFetchRequest * request = [NSFetchRequestfetchRequestWithEntityName:@"Employee"];

    request.predicate = [NSPredicatepredicateWithFormat:@"name=%@",@"zhangsan"];

    

   NSError * error =nil;

   NSArray * emps = [self.contextexecuteFetchRequest:requesterror:&error];


   for (Employee * empin emps) {

        

        emp.height =@(200);

        

    }

    

    [self.contextsave:nil];

}



0 0
原创粉丝点击