CoreData简介:
CoreData用于数据持久化,适合大数据量的存储和查询,但要注意的一点是CoreData不是数据库,而是用来管理数据库的一套框架,CoreData可以使用数据库、XML等方式来存储数据。可以在Xcode上进行表的设计,或使用Instruments进行性能检测,可以直接生成高质量的代码。
CoreData的主要对象:
1)NSManagedObjectContext(被管理的数据上下文)
操作实际内容(操作持久层)
作用:插入数据,查询数据,删除数据,修改数据
(2)NSManagedObjectModel(被管理的数据模型)
数据库所有表格或数据结构,包含各实体的定义信息
作用:添加实体的属性,建立属性之间的关系
操作方法:视图编辑器,或代码
(3)NSPersistentStoreCoordinator(持久化存储助理)
相当于数据库的连接器
作用:设置数据存储的名字,位置,存储方式,和存储时机
(4)NSManagedObject(被管理的数据记录)
相当于数据库中的表格记录
(5)NSFetchRequest(获取数据的请求)
相当于查询语句
(6)NSEntityDescription(实体结构)
相当于表格结构
作用:创建entity实体
在CoreData中创建类和属性:
创建工程时一定不要忘记勾选Use Core Data ,勾选完这个选项在Appdelegate.m的文件中会自动生成操作CoreData的方法
在工程的文件夹列表里找到.xcdatamodeled文件选中
点击左下角的Add Entity 创建entity实体
创建的实体的命名规则遵循驼峰命名法 注意首字母必须大写
创建完实体后 在Attribute中添加属性 注意属性的名字的首字母必须小写
然后就Command+N创建文件
切记勾选
创建完成后出现下列文件夹
这样实体在xcdatamodeled文件中就创建完成了,接着在代码中实现
Appdelegate.m文件中封装了一些方法
获取Documents的路径
- (NSURL *)applicationDocumentsDirectory
获取管理对象
- (NSManagedObjectModel *)managedObjectModel
数据库持久化协调器(真正干活的)
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
获取数据库上下文
- (NSManagedObjectContext *)managedObjectContext
保存Context
- (void)saveContext
在ViewController.m里开写要操作的代码
//第一步:引入头文件appdelegate
#import "AppDelegate.h"
#import "Person.h"
//第二步:在延展中声明属性(管理对象上下文)[sqlite中是声明一个存储路径属性]
@property(nonatomic, strong)NSManagedObjectContext *managedObjectContext;
懒加载:
- (NSManagedObjectContext *)managedObjectContext { // 因为在Appdelegate中已经实现过了,所以在这里是从Appdelegate中去获取 if (_managedObjectContext == nil) { // 获取appDelegate对象 AppDelegate *appDelegate = [UIApplication sharedApplication].delegate; _managedObjectContext = appDelegate.managedObjectContext; } return _managedObjectContext; }
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // 添加person [self addPerson]; // 删除person [self deletePerson]; // 更改person信息 [self updatePerson]; // 查询数据 [self selectAllPerson]; // 更改car的信息 [self updateCar]; }
- (void)addPerson { // 添加的步骤 // 1.创建person实体对象,然后告诉“context”,让他做好准备,将这个对象添加到数据库中 // 实例对象有两种方式[初始化实体对象需要借用 NSEntityDescription] // 第一种: // Person *per = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.managedObjectContext]; // 第二种 // 创建一个entity的实体 NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.managedObjectContext]; // 创建Person对象 Person *per = [[Person alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:self.managedObjectContext]; // 2.给对象属性赋值 per.personName = @"MBboy"; per.personGender = @"unKnow"; per.personAge = @30; // 3.将person对象存入数据库 BOOL result = [_managedObjectContext save:nil]; // 4.判断是否插入成功 if (result) { NSLog(@"添加数据成功"); } else { NSLog(@"添加数据失败"); } }
- (void)deletePerson { // 第一步:实体化请求类【查询】(NSFetchRequest) NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; // 第二步:找到删除的条件(即根据什么进行删除)NSPredicate request.predicate = [NSPredicate predicateWithFormat:@"personName = 'MBboy'"]; // 第三步:由context根据删除条件的请求去具体进行删除操作 NSArray *resultArray = [self.managedObjectContext executeFetchRequest:request error:nil]; // 第四步:遍历数组 for (Person *per in resultArray) { // 删除查询到的相关的人的信息 [self.managedObjectContext deleteObject:per]; } // 第五步:进行删除结果的判断 BOOL result = [_managedObjectContext save:nil]; if (result) { NSLog(@"删除成功"); } else { NSLog(@"删除失败"); } }
- (void)updatePerson { // 1.实例化查询请求类 NSFetchRequest *requeset = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; // 2.设置条件 requeset.predicate = [NSPredicate predicateWithFormat:@"personName = 'MBboy'"]; // 3.由context按照查询条件进行相关的操作 NSArray *resultArray = [self.managedObjectContext executeFetchRequest:requeset error:nil]; // 4.遍历数组更新相关的信息 for (Person *per in resultArray) { // 更改相关的信息 per.personName = @"小强"; per.personGender = @"boy"; per.personAge = @38; NSLog(@"name = %@, gender = %@ age = %@", per.personName, per.personGender, per.personAge); } // 5.进行更新结果的判断 BOOL result = [self.managedObjectContext save:nil]; if (result) { NSLog(@"更新成功"); } else { NSLog(@"更新失败"); } }
查询信息
- (void)selectAllPerson { // 1.实例化查询请求 NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; // 2.设置查询条件 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"personName LIKE '*强'"]; request.predicate = predicate; // 3.根据管理对象上下文执行相关的操作 NSArray *resultArray = [self.managedObjectContext executeFetchRequest:request error:nil]; // 4.遍历查询结果 for (Person *per in resultArray) { NSLog(@"name = %@ gender = %@ age = %@", per.personName, per.personGender, per.personAge); } }