CoreData的简单使用

 一.CoreData

####1.CoreData用于作数据持久化,适合大数据量的存储和查询;数据库

####2.CoreData不是数据库,CoreData能够使用数据库,XML等方式来存储数据;框架

####3.SQLite经过SQL语句操做数据,CoreData使用面向对象的方式操做数据;fetch

####4.使用CoreData操做数据,不须要写任何SQL语句;大数据

####5.使用CoreData,须要导入CoreData框架.net

二.CoreData核心对象

(https://static.oschina.net/uploads/img/201609/03185446_dVwX.png "CoreData核心对象的关系")code

NSManagedObject:模型对象,或者叫实体(entity),可理解为OC⾥里的对象。

NSManagedObjectModel:模型⽂文件(.xcdatamodeld),记录全部的模型对象及对象的属性.

NSPersistentStoreCoordinator:持久化存储协调者,是数据库和程序之间的桥梁, ⽤用来设置数据存储的名字,位置,存储⽅方式,和存储时机。⽤用来执⾏行具体的CRUD操做。

NSManagedObjectContext:对象管理上下⽂文,⽤用户全部的持久化操做都是经过此 对象。再由此对象去调⽤用NSPersistentStoreCoordinator对象执⾏行具体的操做。

实体管理类:NSManagedObjectorm

实体描述类:NSEntityDescription对象

数据管理器类:NSManagedObjectContextip

数据链接器类:NSPersistentStoreCoordinatorget

数据模型器类:NSManagedObjectModel

构建流程:

1.如果新建的工程,选择空白应用程序,next

2.勾选Use Core Data选项

此时生成的工程文件AppDelegate中,会自动生成被管理的数据上下文等相关代码

1.添加元素:

// 一、添加一个实体对象到 managedObjectContext 中
    User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:delegate.managedObjectContext];
    user.userID = @"10002";
    user.userName = @"怀化";
    user.userAge = @30;
    user.userSex = @"男";
    user.saveDate = [NSDate date];
    
    // 二、保存上下文
    [delegate saveContext];
}

2.查询:

// 一、建立一个取值请求
    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;
    // 二、在上下文中执行取值请求
    NSArray *objects = [delegate.managedObjectContext executeFetchRequest:request error:&error];

    [objects enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
       
        User *user = (User *)obj;

3.删除:

// 一、查询
    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) {
        
        // 二、删除
        [delegate.managedObjectContext deleteObject:obj];
        
        // 三、保存
        [delegate saveContext];

4.更新:

// 一、查询
    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) {
        
        // 二、修改
       User *user = (User *)obj;
        user.saveDate = [NSDate date];
        
        // 三、保存
        [delegate saveContext];