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];
}
添加Person
- (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(@"添加数据失败");
}
}
删除person
- (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);
}
}