coreData的初步认识

概述

  1. Core Data不是数据库,⽽而是使⽤用数据库、XML、⼆二进制⽂文件等⽅方式来存储数据的⼀一 个框架。
  2. Core Data是iOS3以后才出现的⼀一个框架,容许咱们以⾯面向对象的⽅方式储存和管理数 据。使⽤用Core Data框架,咱们能够很轻松有效地经过⾯面向对象的接⼝口管理数据。
  3. Core Data框架提供了对象-关系映射(ORM)的功能,即可以将OC对象转化成数据, 保存在SQLite3数据库⽂文件中,也可以将保存在数据库中的数据还原成OC对象。 在数据操做过程当中,⽆无需编写任何SQL语句。

coreData核心对象

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

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

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

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

coreData使用步骤

  1. 建立模型文件
  2. 添加实体
  3. 建立实体类
  4. 生成对象管理上下文
    #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];
        
    }

     

  5. 增删改查操做code

    添加

    #pragma mark - 添加
    - (void)insertObject {
        
        // 建立实体对象
        // NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:delegate.managedObjectContext];
        
        // 一、添加一个实体对象到 managedObjectContext 中
        User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:delegate.managedObjectContext];
        user.userID = @"10002";
        user.userName = @"张三";
        user.userAge = @28;
        user.userSex = @"男";
        user.saveDate = [NSDate date];
        
        // 二、保存上下文
        [delegate saveContext];
    }

    查询

    #pragma mark - 查询
    - (void)findObject {
        
        // 一、建立一个取值请求
        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;
            
            NSLog(@"%@ %@ %@ %@ %@",user.userID, user.userName, user.userAge, user.userSex, user.saveDate);
        }];
        
    }

    更新

    #pragma mark - 更新
    - (void)updateObject {
        
        // 一、查询
        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];
        }];
    }

    删除

    #pragma mark - 删除
    - (void)deleteObject {
        
        // 一、查询
        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];
        }];
    }
相关文章
相关标签/搜索