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];
//在排序过程中,首先以年龄为主关键字,如果年龄相同,则已性别为排序字段。
   NSSortDescriptor *ageSort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];//yes升序,no降序
NSSortDescriptor *genderSort = [NSSortDescriptor sortDescriptorWithKey:@"gender" ascending:YES];
//在排序过程中,首先以年龄为主关键字,如果年龄相同,则已性别为排序字段。
        [request setSortDescriptors:@[ageSort,genderSort]];  
           //执行查询   
NSError *error = nil;
   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];  
   


 京公网安备 11010502036488号
京公网安备 11010502036488号