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];             
点赞 0
评论 0
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务