• CoreData的基本操作


     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];
     
  • 相关阅读:
    sqlitespy sqlite 开发工具
    Visual Studio Installer问题:Your machine is busy installing a program other than Visual Studio
    k8s按照创建顺序展示pod
    tmux: open terminal failed: missing or unsuitable terminal: xterm256color
    ubuntu删除源
    docker打包容器
    docker中文乱码
    OpenPAI之进入dev box容器
    apt依赖出错问题修复
    ubuntu关闭swap
  • 原文地址:https://www.cnblogs.com/xjf125/p/4829442.html
Copyright © 2020-2023  润新知