IOS CoreData

来源:互联网 发布:雅思测试软件 编辑:程序博客网 时间:2024/05/19 14:54

一: CoreData 中的常见的管理类

  (1)NSManagedObjectContext   //  临时数据库

  (2)NSManagedObjectModel   //  模型管理器

  (3)NSPersistentStoreCoordinator  //  数据连接器

二: CoreData中依据实体(已生成的)创建对象 并持久化

//  获取Appselegate 对象
    AppDelegate * dele = (AppDelegate * )[UIApplication sharedApplication].delegate;
//  创建实体描述
    NSEntityDescription * entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:dele.managedObjectContext];
//  根据实体描述 创建 模型 并插入到临时数据库
    Person * person = [[Person alloc]initWithEntity:entity insertIntoManagedObjectContext:dele.managedObjectContext];
    person.name = @"iverson";
    person.age = @39;
// 将临时数据库 同步到 数据库
    [dele  saveContext];

三: CoreData中 如何进行增 删 改 查

  (1)增

      就是依据 二 中的步骤 创建一个要增加的对象  并再一次同步到数据库即可

   (2)查

     查 即对已做的数据持久化进行检索  并可视化  但是在进行数据取值 的时候 要引入一个新的 类 和对象(并附上其初始化方法)NSFetchRequest * request = [[NSFetchRequest alloc]initWithEntityName:@"Person"];  根据实体名  创建FetchRequest对象 FetchRequest 是CoreData的取值类之一 可以依据已经生成的 实体modal 进行检索   完整的取值 查询过程 如下:

//  获取Appselegate 对象
    AppDelegate * dele = (AppDelegate * )[UIApplication sharedApplication].delegate;
//  根据实体描述名  创建FetchRequest对象
    NSFetchRequest * request = [[NSFetchRequest alloc]initWithEntityName:@"Person"];
//  取出属性 然后用KVC赋值给对象
     request.returnsObjectsAsFaults = NO;// 设置在安全性基础上设置 输出样式
//  取数据,根据FetchRequest
    NSArray * array = [dele.managedObjectContext  executeFetchRequest:request error:nil];
     NSLog( @"%@",array);


    (3)  删  该  

两者都是在查询的基础上进行的,只有拿到数据库中的值才可以进行 删除和 改正 所以要先按照上述步骤进行 取值  然后再依据已经生成的Model 定义Model类对象 调用 deleteObject: 方法 就可以实现删除  而改正 则是 重新的对已经拿到(查询到的)数据 根据model中的字段进行改正(赋新值),并同步到数据库即可

*******************************************************************************************************************************************

//  获取Appselegate 对象
    AppDelegate * dele = (AppDelegate * )[UIApplication sharedApplication].delegate;
//  根据实体描述名  创建FetchRequest对象
    NSFetchRequest * request = [[NSFetchRequest alloc]initWithEntityName:@"Person"];
//  取出属性 然后用KVC赋值给对象
     request.returnsObjectsAsFaults = NO;// 设置在安全性基础上设置 输出样式
//  取数据,根据FetchRequest
    NSArray * array = [dele.managedObjectContext  executeFetchRequest:request error:nil];
     NSLog( @"%@",array);

//  删除
    Person * person1 = [array firstObject];
    [dele.managedObjectContext deleteObject:person1];
//  删除后 同步数据库
    [dele saveContext];


********************************************************************************************************************************************

//  获取Appselegate 对象
    AppDelegate * dele = (AppDelegate * )[UIApplication sharedApplication].delegate;
//  根据实体描述名  创建FetchRequest对象
    NSFetchRequest * request = [[NSFetchRequest alloc]initWithEntityName:@"Person"];
//  取出属性 然后用KVC赋值给对象
     request.returnsObjectsAsFaults = NO;// 设置在安全性基础上设置 输出样式
//  取数据,根据FetchRequest
    NSArray * array = [dele.managedObjectContext  executeFetchRequest:request error:nil];
     NSLog( @"%@",array);

 //  修改
    person1.name = @"高富帅";
    [dele saveContext];

*******************************************************************************************************************************************

四: CoreData中 如何利用谓词进行数据 查询

     Cocoa 提供了NSPredicate 用于指定过滤条件,谓词是指在计算机中表示计算真假值的函数,它使用起来有点儿像SQL 的查询条件,主要用于从集合中分拣出符合条件的对象,也可以用于字符串的正则匹配.需要注意谓词是检索数据的 所以其一般是用于数据库取值时的


// 谓词
    NSPredicate * perd = [NSPredicate predicateWithFormat:@"name == 'kobe' "];
    request.predicate = perd;
    
//  以什么结尾或者开头的搜索
   NSPredicate * perd = [NSPredicate predicateWithFormat:@"name endswith' e' "];
   NSPredicate * perd = [NSPredicate predicateWithFormat:@"name beginswith 'k' "];
   NSPredicate * perd = [NSPredicate predicateWithFormat:@"name beginswith %@ ",@"k"];
    
//  类似于 可替换以什么 开头 以什么结尾
    NSPredicate * perd = [NSPredicate predicateWithFormat:@"name liake %@ ",@"*e"];
    
//  谓词中的包含查询
   NSPredicate * perd = [NSPredicate predicateWithFormat:@"name contains 'ob' "];
   NSPredicate * perd = [NSPredicate predicateWithFormat:@"name contains 'ob' and   age == 38 "];
   NSPredicate * perd = [NSPredicate predicateWithFormat:@"name contains 'ob' &&   age == 38 "];
   NSPredicate * perd = [NSPredicate predicateWithFormat:@"name contains 'ob' ||   age == 38 "];
   NSPredicate * perd = [NSPredicate predicateWithFormat:@"name contains 'ob' or  age == 38 "];
 

五: CoreData中 的版本迁移

       随着App的不断升级 其中涉及到数据 也是不断更新的 所以要在原有数据 的基础上 进行数据的扩充 这就是版本迁移。


迁移准备

     1) 选中工程中的 xcdaramodeId 文件,Menu->Editor->Add Model Version

这一步添加完成之后,工程中的*xcdaramodeId* 文件将会被展开,并且出现了新增加的Model文件

     2) 在Xcode右侧的辅助工具栏中找到 Model Version, 选择刚刚添加的Model文件,这个时候你会发现Xcode目录中,Model文件上的绿色的勾选中了当前选择的Model文件

     3) 在新的Model文件中修改最新的Entities等信息,记得也同时修改NSManagedObject Subclass对应的实现

     4) 修改 NSPersistentStoreCoordinator部分实现:


*******************************************************************************************************************************************

     在得到persistentstore时,一般是在appdeleate的persistentStoreCoordinator方法中,为addPersistentStoreWithType:configuration:URL:options:error:方法的options传递参数,模板产生的方法该参数是nil。
     
     为支持自动迁移,传递一个包含2个key的字典作为参数,NSMigratePersistentStoresAutomaticallyOption和NSInferMappingModelAutomaticallyOption,赋值YES。

相关链接:  http://blog.csdn.net/sirchenhua/article/details/7302729

*******************************************************************************************************************************************







0 0
原创粉丝点击