一.CoreData
####1.CoreData用于做数据持久化,适合大数据量的存储和查询;
####2.CoreData不是数据库,CoreData可以使用数据库,XML等方式来存储数据;
####3.SQLite通过SQL语句操作数据,CoreData使用面向对象的方式操作数据;
####4.使用CoreData操作数据,不需要写任何SQL语句;
####5.使用CoreData,需要导入CoreData框架
二.CoreData核心对象
(https://static.oschina.net/uploads/img/201609/03185446_dVwX.png "CoreData核心对象的关系")
NSManagedObject:模型对象,或者叫实体(entity),可理解为OC⾥里的对象。
NSManagedObjectModel:模型⽂文件(.xcdatamodeld),记录所有的模型对象及对象的属性.
NSPersistentStoreCoordinator:持久化存储协调者,是数据库和程序之间的桥梁, ⽤用来设置数据存储的名字,位置,存储⽅方式,和存储时机。⽤用来执⾏行具体的CRUD操作。
NSManagedObjectContext:对象管理上下⽂文,⽤用户所有的持久化操作都是通过此 对象。再由此对象去调⽤用NSPersistentStoreCoordinator对象执⾏行具体的操作。
实体管理类:NSManagedObject
实体描述类:NSEntityDescription
数据管理器类:NSManagedObjectContext
数据连接器类:NSPersistentStoreCoordinator
数据模型器类:NSManagedObjectModel
构建流程:
1.若是新建的工程,选择空白应用程序,next
2.勾选Use Core Data选项
此时生成的工程文件AppDelegate中,会自动生成被管理的数据上下文等相关代码
1.添加元素:
// 1、添加一个实体对象到 managedObjectContext 中
User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:delegate.managedObjectContext];
user.userID = @"10002";
user.userName = @"怀化";
user.userAge = @30;
user.userSex = @"男";
user.saveDate = [NSDate date];
// 2、保存上下文
[delegate saveContext];
}
2.查询:
// 1、创建一个取值请求
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
// 使用谓词设置查询条件
// request.predicate = [NSPredicate predicateWithFormat:@"userAge < 35"];
// request.predicate = [NSPredicate predicateWithFormat:@"userName LIKE '*杨*'"];
// 设置查询的条数
request.fetchLimit = 2;
// 指定到某个位置开始查询(分页效果)
request.fetchOffset = 2;
// 按某个字段升序、降序排列
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"userAge" ascending:YES];
request.sortDescriptors = @[sort];
NSError *error = nil;
// 2、在上下文中执行取值请求
NSArray *objects = [delegate.managedObjectContext executeFetchRequest:request error:&error];
[objects enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
User *user = (User *)obj;
3.删除:
// 1、查询
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
request.predicate = [NSPredicate predicateWithFormat:@"userID == '10005'"];
NSArray *objects = [delegate.managedObjectContext executeFetchRequest:request error:nil];
[objects enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
// 2、删除
[delegate.managedObjectContext deleteObject:obj];
// 3、保存
[delegate saveContext];
4.更新:
// 1、查询
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
request.predicate = [NSPredicate predicateWithFormat:@"userID == '10005'"];
NSArray *objects = [delegate.managedObjectContext executeFetchRequest:request error:nil];
[objects enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
// 2、修改
User *user = (User *)obj;
user.saveDate = [NSDate date];
// 3、保存
[delegate saveContext];
来源:oschina
链接:https://my.oschina.net/u/2891827/blog/741969