Core Data不是应用程序的数据库,也不是将数据持久化保存到数据库的API。Core Data是一个用于管理对象图的框架。Core Data可以把对象图写入磁盘从而持久化保存。
1.Core Data stack
Core Data stack是Core Data的核心,由一组Core Data核心对象组成.
➢ NSManagedObjectContext 对象管理上下文: 负责管理模型的对象的集合
➢ NSManagedObjectModel 被管理的对象模型: 负责管理对象模型
➢ NSPersistentStoreCoordinator 存储调度器: 负责将数据保存到磁盘的
2.多表关联
Type:
toOne:只指向一个对象
toMany:可以包含多个对象(一般是集合类型)
DeleteRule:
ClassRoom.students --> Student Nullify(作废):
Student.classRoom --> ClassRoom Nullify:
3.NSManagedObjectContext使用上下文查询
1) 实例化查询请求
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
2) 实例化实体描述(指定要去哪个实体里查&使用哪个上下文)
NSEntityDescription *entity = [NSEntityDescription entityForName:[Contact entityName] inManagedObjectContext:[CoreDataTool shareInstance].managedObjectContext];
3) 将查询请求设置实体名
[fetchRequest setEntity:entity];
4) 实例化 查询条件(谓词)
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.name contains 'a'"];
5) 设置查询请求的 查询条件
[fetchRequest setPredicate:predicate];
6) 实例化一个排序器(指定某个属性的升降顺序)
NSSortDescriptor*sortDescriptor=[[NSSortDescriptor alloc] initWithKey:@"namePinYin" ascending:YES];
7) 设置查询请求的排序器(可以多个)
[fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortDescriptor, nil]];
8) 使用管理上下文执行查询语句
NSError *error = nil;
NSArray*fetchedObjects=[[CoreDataTool shareInstance].managedObjectContext executeFetchRequest:fetchRequest error:&error];