iOS CoreData

CoreData核心对象

  • 实体管理类:NSManagedObject
  • 实体描述类:NSEntityDescription
  • 数据管理器类:NSManagedObjectContext
  • 数据连接器类:NSPersistentStoreCoordinator
  • 数据模型器类:NSManagedObjectModel

CoreData核心类的关系

iOS CoreData_第1张图片
CoreData核心类的关系

CoreData数据框架的核心对象

持久化储存和存储文件

  • NSPersistentStore:持久化数据储存,是对实际文件的一种Objective-C的一种表示方式,一个被封装好的底层类,用于存储数据。

被管理上下文

  • NSManagedObjectContext被管理对象上下文,在CoreData中用于操作和使用数据,负责应用和数据库之间的交互。
  • 数据库的保存需要NSManagedObjectContext进行save操作。
  • 数据的查询需要NSManagedObjectContext进行executeFetchRequest操作,返回值是数组。
  • CoreData提供的是对象关系映射,NSManagedObjectContext操作的都是NSManagedObject对象。

被管理对象相关类

  • NSManagedObjectMode:被管理对象模型,管理多个对象。
  • NSManagedObject:被管理对象,CoreData返回的数据模型,被管理的对象是根据实体描述生成的。
  • NSEntityDescription:实体描述类根据实体创建被管理对象。
  • Entity:实体类,实体是对文件数据的描述,被管理对象标表示实体,实体包含名称,属性(字段)和关系,实体的名称通常被管理对象名称一致。

数据查询

  • NSFetchRequest:查询请求,可以做排序操作,也可以使用谓词。
  • NSManagedObjectContext:根据NSFetchRequest查询数据,以数组形式返回,数组中包含被管理对象(NSManagedObject)。
  • NSSortDescriptor:排序操作。

数据持久化的过程

  • 持久化数据的过程:context上下文将对被管理对象的子类进行的所有操作(包括增加,删除,更新等)进行持久化的时候(调用save方法的时候),将所有的操作交给持久化数据协调器(persistentStoreCoordinator),persistentStoreCoordinator(持久化数据协调器)会把对象类型的数据转化成二进制类型的数据,然后存储到文件系统中。
  • 读取过程:持久化数据协调器(persistentStoreCoordinator)从文件系统中读取出二进制的数据,根据实体对象转换成对应的对象类型。将转换好的数据交给上下文来操作。

示例代码

往数据库中添加元素

- (void)addObject{
    NSEntityDescription *description = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.delegate.managedObjectContext];
    Student *stu = [[Student alloc]initWithEntity:description insertIntoManagedObjectContext:self.delegate.managedObjectContext];
    stu.name = @"小明";
    stu.gender = @"男";
    [self.delegate saveContext];
    NSLog(@"%@",NSHomeDirectory());
}

修改元素

- (void)changeFromCoreData{
    NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:@"Student"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@",@"小明"];
    request.predicate = predicate;
    NSArray *array = [self.delegate.managedObjectContext executeFetchRequest:request error:nil];
    for (Student *stu in array) {
        stu.name = @"小李";
    }
    [self.delegate saveContext];
}

删除元素

- (void)delegateFromCoreData{
    NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:@"Student"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@",@"小明"];
    request.predicate = predicate;
    NSArray *array = [self.delegate.managedObjectContext executeFetchRequest:request error:nil];
    for (Student *stu in array) {
        [self.delegate.managedObjectContext deleteObject:stu];
    }
    [self.delegate saveContext];
}

查询元素

- (void)selectFromCoreData{
    NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:@"Student"];
    NSArray *array = [self.delegate.managedObjectContext executeFetchRequest:request error:nil];
    NSLog(@"%@",array);
}

你可能感兴趣的:(iOS CoreData)