Managed Object Model(被管理对象模型):
–数据库的轮廓,或者结构。包含了各个实体的定义信息
     Persistent Store Coordinator (持久性数据协调器):
– 数据库连接库,在这里设置数据存储的名字和位置,以及数据存储的时机
     Managed Object Context (被管理对象上下文):
–数据的实际内容,基本上,插入数据,查询数据,删除数据的工作都在这里完成
写模块是怎样运作的呢?
1,应用程序先创建或读取模型文件(后缀为xcdatamodeld)生成 NSManagedObjectModel 对象。Document应用程序是一般是通过 NSDocument 或其子类 NSPersistentDocument)从模型文件(后缀为 xcdatamodeld)读取。
2,然后生成 NSManagedObjectContext 和 NSPersistentStoreCoordinator 对象,前者对用户透明地调用后者对数据文件进行读写。
3,NSPersistentStoreCoordinator 负责从数据文件(xml, sqlite,二进制文件等)中读取数据生成 Managed Object,或保存 Managed Object 写入数据文件。
4,NSManagedObjectContext 参与对数据进行各种操作的整个过程,它持有 Managed Object。我们通过它来监测 Managed Object。监测数据对象有两个作用:支持 undo/redo 以及数据绑定。这个类是最常被用到的。
5,Array Controller, Object Controller, Tree Controller 这些控制器一般与 NSManagedObjectContext 关联,因此我们可以通过它们在 nib 中可视化地操作数据对象。
 
 
如果希望看到内部是如何执行的,可以打开调试功能:
在运行控制中,选择Arguments选项,在Arguments Password On Launch中添加以下命令:
-com.apple.CoreData.SQLDebug 1
 
使用CoreData创建实体
1._2_CoreData.xcdatamodeld中选择"Add Entity”.
添加实体Person,,为Person添加属性,
2.创建实体对象
Person *person = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Person class]) inManagedObjectContext:self.managedObjectContext];
person.name = @"Tom";
person.age = [NSNumber numberWithInt:22];
person.gender = @'M';
3.保存实体的方法
[self saveContext];
4.查询实体对象
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Person class])];
5.设置request属性
 //定义查询条件
//    [request setPredicate:<#(NSPredicate *)#>];//设置谓词对象,相当于where子句
 
    //定义排序对象(设置依靠哪个字段进行排序,例如:以姓名,性别为例)
    NSSortDescriptor *ageSort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];//yes升序,no降序
    NSSortDescriptor *genderSort = [NSSortDescriptor sortDescriptorWithKey:@"gender" ascending:YES];
    //在排序过程中,首先以年龄为主关键字,如果年龄相同,则已性别为排序字段。
    [request setSortDescriptors:@[ageSort,genderSort]];
    //执行查询
    NSError *error = nil;
    NSArray *persons = [self.managedObjectContext executeFetchRequest:request error:&error];
 
    if (!error)
    {
        [persons enumerateObjectsUsingBlock:^(Person *person, NSUInteger idx, BOOL *stop)
          {
            NSLog(@"name:%@,age:%@,gender:%c",person.name,person.age,(char)[person.gender integerValue]);
        }];
    }
在CoreData中删除对象实体的方法:
//取出CoreData中的数据
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Book class])];
NSError *error = nil;
NSArray *fetchedResult = [self.managedObjectContent executeFetchRequest:request error:&error];
如果通过TableView对数据进行删除操作,步骤如下:
1.在CoreData中进行删除数据,然后进行保存
[self.managedObjectContent deleteObject:book];
NSError *error = nil;
 [self.managedObjectContent save:&error];
 if (error) {
      NSLog(@"删除失败");
 }
2.在保存数据源的数组中进行删除对象
[self.books removeObject:book];
3.局部刷新单元格
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
 

CoreData的基本操作的更多相关文章

  1. iOS CoreData 的级联删除等操作

    关于CoreData 的基本操作在网上有一些中文资料,但是这些资料大多没有涉及CoreData的详细操作,只是简单的演示了最基本用法.像级联删除这种最基本的数据库操作都没有提到.今天在网上看到了一些英 ...

  2. iOS数据持久化

    在iOS中,实现数据持久化一般分为4大种: 1.属性列表 2.对象归档 3.SQLite 4.Core Data 一.属性列表 NSUserDefaults类的使用和NSKeyedArchiver有很 ...

  3. iOS_SN_CoreData(二)

    上一篇是讲怎么进行CoreData的基本操作,这一篇是讲NSFetchedResultsController得到CoreData数据怎么与tableView完美结合,和动画操作的实现. NSFetch ...

  4. iOS -数据持久化方式-以真实项目讲解

    前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎 ...

  5. iOS-CoreData详解与使用

    上面已经说完了SQLite和FMDB以及两者的区别,本篇将讲述iOS中另一个存储方式,CoreData的使用.通读下来大约10分钟,后续还会根据项目中问题,不断更新. 一.预备知识 在了解CoreDa ...

  6. iOS-数据持久化-CoreData

    CoreData详解 介绍: 在Cocoa环境下,如果你想使用数据库(如sqlite),你可以使用sql语句的方式通过相关的工具类进行数据库的直接操作.当然你也可以通过别人封装之后的一些简单框架,使得 ...

  7. iOS CoreData技术学习资源汇总

    一.CoreData学习指引 1. 苹果官方:Core Data Programming Guide 什么是CoreData? 创建托管对象模型 初始化Core Data堆栈 提取对象 创建和修改自定 ...

  8. 使用开源库MagicalRecord操作CoreData

      1. 将 MagicalRecord 文件夹拖入到工程文件中,引入 CoreData.frame 框架 2. 在 .pch 文件中引入头文件 CoreData+MagicalRecord.h 注: ...

  9. CoreData 基本操作方法封装

    转:http://blog.csdn.net/marujunyy/article/details/18500523 为了方便使用CoreData 封装了几个扩展类,使用方法和类文件如下: //首先需要 ...

随机推荐

  1. 自定义实现wcf的用户名密码验证

    目前wcf分为[传输层安全][消息层安全]两种,本身也自带的用户名密码验证的功能,但是ms为了防止用户名密码明文在网络上传输,所以,强制要求一旦使用[用户名密码]校验功能,则必须使用证书,按照常理讲, ...

  2. audio的总结

    H5的audio谁都会用, 照着官方api放个标签, play, stop... 实际运用中需要一些兼容性封装: //audio $.audio = function(params) { var $a ...

  3. 项模板选择器属性(ItemTemplateSelector属性)和样式选择器(ItemContainerStyleSelector)

    3.4.5 共享尺寸组 样式选择器: 或者========================================

  4. Classification week6: precision & recall 笔记

    华盛顿大学 machine learning :classification  笔记 第6周 precision & recall 1.accuracy 局限性 我们习惯用 accuracy ...

  5. Python Socket套接字

    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...

  6. 信息属性列表关键字 info.plist

    本文转载至  http://blog.csdn.net/zaitianaoxiang/article/details/6650491 本附录说明了那些可以在束和包的属性列表文件中定义的关键字. 束关键 ...

  7. 《从零开始学Swift》学习笔记(Day 25)——类和结构体定义

    原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { ...

  8. Linux下OpenOffice的安装与启动

    公司项目需求中增加了文档预览功能,所以采用了OpenOffice提供的将office文件转换为pdf的工具.那么我们的程序运行在服务器端,服务器系统版本多是Linux,因此有必要记录下Linux下Op ...

  9. Java 自带的加密类MessageDigest类(加密MD5和SHA)

    Java 自带的加密类MessageDigest类(加密MD5和SHA) - X-rapido的专栏 - CSDN博客 https://blog.csdn.net/xiaokui_wingfly/ar ...

  10. Javascript-Switch

    JavaScript Switch 语句 请使用 switch 语句来选择要执行的多个代码块之一. 语法 switch(n) { case 1: 执行代码块 1 break; case 2: 执行代码 ...