CoreData核心对象
- 实体管理类:NSManagedObject
- 实体描述类:NSEntityDescription
- 数据管理器类:NSManagedObjectContext
- 数据连接器类:NSPersistentStoreCoordinator
- 数据模型器类:NSManagedObjectModel
CoreData核心类的关系
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);
}
网友评论