一、概述
数据存储可以使用plist,NSUserDefault,归档解档,sqlite,CoreData
CoreData是iOS5后,苹果提供的原生的用于对象化管理数据并且持久化的框架,他的本质是将底层数据库进行了封装成对象再进行操作管理
二、相关类的介绍
1.NSManagedObject
- 在CoreData中处理的任何一个实体的实例都是NSManagedObject类型的对象或者其子类对象;
NSManagedObject的工作模式是通过键-值对来存取所有的实体属性:
setValue:forKey:存储属性值;
valueForKey:获取属性值;
2.NSManagedObjectModel
- NSManagedObjectModel代表着内存中的数据模型,它是一个OC类,可以添加实体及实体属性
3.NSManagedObjectContext
- NSManagedObjectContext负责应用与数据库之间的交互,可以实现增删改查基本操作功能
4.NSPersistentStoreCoordinator
- 持久化存储并不是由OC类来呈现,而是通过持久化存储协调器NSPersistentStoreCoordinator来进行访问,数据库的连接器
5.NSFetchRequest
- NSFetchRequest相当于一个查询语句,必须指定要查询的 Entity
6.NSEntityDescription
- NSEntityDescription对象关联到一个特定类的实例用于表示条目使用核心数据持久化存储在应用程序框架,实例指定一个实体的名字,其属性(属性和关系,表达了NSAttributeDescription和NSRelationshipDescription)的实例和类的代表
三.使用CoreData进行数据的增删改查
2.首先要获取上下文环境,可以看到在AppDelegate里面自动增加的属性,点进API中里面有上下文的属性
- 实现增加数据
AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate;
EnglishTeacher *people = [NSEntityDescription insertNewObjectForEntityForName:@"EnglishTeacher" inManagedObjectContext:app.persistentContainer.viewContext];
people.name = @"李老师";
[app saveContext];
注:这里调用了如下方法,第一个参数传实体名称,第二个参数传上下文,之后可以给属性赋值,并调用saveContext
方法进行存储
+ (__kindof NSManagedObject *)insertNewObjectForEntityForName:(NSString *)entityName inManagedObjectContext:(NSManagedObjectContext *)context;
- 查询数据
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"EnglishTeacher"];
NSArray *persons = [app.persistentContainer.viewContext executeFetchRequest:request error:nil];
for (EnglishTeacher *people in persons) {
NSLog(@"%@",people.name);
}
- 修改数据
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"EnglishTeacher"];
NSArray *persons = [app.persistentContainer.viewContext executeFetchRequest:request error:nil];
for (EnglishTeacher *people in persons) {
if ([people.name isEqualToString:@"李老师"]) {
people.name = @"王老师";
[app saveContext];
}
}
- 删除数据
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"EnglishTeacher"];
NSArray *persons = [app.persistentContainer.viewContext executeFetchRequest:request error:nil];
for (EnglishTeacher *people in persons) {
if ([people.name isEqualToString:@"张老师"]) {
[app.persistentContainer.viewContext deleteObject:people];
[app saveContext];
}
}
注:删除和修改操作都是建立在查询的基础上操作的
百度云盘链接:https://pan.baidu.com/s/1nv5R1Fz 密码:5mym