概述
- Core Data不是数据库,⽽而是使⽤用数据库、XML、⼆二进制⽂文件等⽅方式来存储数据的⼀一 个框架。
- Core Data是iOS3之后才出现的⼀一个框架,允许我们以⾯面向对象的⽅方式储存和管理数 据。使⽤用Core Data框架,我们可以很轻松有效地通过⾯面向对象的接⼝口管理数据。
- Core Data框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据, 保存在SQLite3数据库⽂文件中,也能够将保存在数据库中的数据还原成OC对象。 在数据操作过程中,⽆无需编写任何SQL语句。
coreData核心对象
-
NSManagedObject:模型对象,或者叫实体(entity),可理解为OC⾥里的对象。
-
NSManagedObjectModel:模型⽂文件(.xcdatamodeld),记录所有的模型对象及对象 的属性
-
NSPersistentStoreCoordinator:持久化存储协调者,是数据库和程序之间的桥梁, ⽤用来设置数据存储的名字,位置,存储⽅方式,和存储时机。⽤用来执⾏行具体的CRUD操作。
-
NSManagedObjectContext:对象管理上下⽂文,⽤用户所有的持久化操作都是通过此 对象。再由此对象调NSPersistentStoreCoordinator对象执⾏行具体的操作。
coreData使用步骤
- 创建模型文件
- 添加实体
- 创建实体类
- 生成对象管理上下文
#import "ViewController.h" #import "User+CoreDataProperties.h" #import "Book+CoreDataProperties.h" #import "AppDelegate.h" @interface ViewController () { AppDelegate *delegate; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"%@",NSHomeDirectory()); delegate = [UIApplication sharedApplication].delegate; // delegate.managedObjectContext; // [self insertObject]; // [self updateObject]; // [self findObject]; [self deleteObject]; }
-
增删改查操作
添加
#pragma mark - 添加 - (void)insertObject { // 创建实体对象 // NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:delegate.managedObjectContext]; // 1、添加一个实体对象到 managedObjectContext 中 User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:delegate.managedObjectContext]; user.userID = @"10002"; user.userName = @"张三"; user.userAge = @28; user.userSex = @"男"; user.saveDate = [NSDate date]; // 2、保存上下文 [delegate saveContext]; }
查询
#pragma mark - 查询 - (void)findObject { // 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; NSLog(@"%@ %@ %@ %@ %@",user.userID, user.userName, user.userAge, user.userSex, user.saveDate); }]; }
更新
#pragma mark - 更新 - (void)updateObject { // 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]; }]; }
删除
#pragma mark - 删除 - (void)deleteObject { // 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]; }]; }
来源:oschina
链接:https://my.oschina.net/u/2893564/blog/741974