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. ps -ef | grep java 查看所有关于java的进程

    ps -ef | grep java   查看所有关于java的进程

  2. js intanceof 或 typeof

    typeof和instanceof的区别 typeof和instanceof都可以用来判断变量,它们的用法有很大区别: typeof会返回一个变量的基本类型,只有以下几种:number,boolean ...

  3. LINQ 标准查询操作符

    本文介绍了LINQ标准查询操作符.没有这些操作符,LINQ就不会存在.本文为理解这些操作符的功能提供了很好的基础.了解它们将会很有帮助,因为LINQ的各种Provider都是基于这些操作符来完成各自丰 ...

  4. Android-ViewPagerIndicator框架使用——LinePageIndicator

    前言:LinePageIndicator类似CirclePageIndicator,只是将圆点指示变成了长条指示. 一:使用是定义的布局文件simple_lines : <LinearLayou ...

  5. ios 2017启动页(Launch Screen Images)、图标(App Icon)尺寸大小

    ios 2017启动页(Launch Screen Images).图标(App Icon)尺寸大小   iPhone Portrait iOS 8,9-Retina HD 5.5 (1242×220 ...

  6. PowerDesigner之设置(3)——根据Name首字母生成Code

    SQL版本:2000 PowerDesigner版本:16 网上有不少介绍 PowerDesigner Name/Code自动调整 的文章,但基本如出一辙. 这里,我就介绍下如何根据输入的Name根据 ...

  7. Markov Process

    w Markov Process -- from Wolfram MathWorld  http://mathworld.wolfram.com/MarkovProcess.html 谷歌背后的数学_ ...

  8. 转载的shell命令73条

    1.检查远程端口是否对bash开放: echo >/dev/tcp/8.8.8.8/53 && echo "open" 2.让进程转入后台: Ctrl + z ...

  9. Android-自己定义meta-data扩展数据

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/wwj_748/article/details/25079991 Android-自己定义meta-d ...

  10. ZFI_VENDOR_CREATE

    创建供应商函数, 需要考虑是 G_TASK = I /U /M FUNCTION zfyj_vendor_create. *"-------------------------------- ...