coreData的初步认识

江枫思渺然 提交于 2019-12-05 22:41:11

概述

  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操作。

  • NSManagedObjectContext:对象管理上下⽂文,⽤用户所有的持久化操作都是通过此 对象。再由此对象调NSPersistentStoreCoordinator对象执⾏行具体的操作。

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. 增删改查操作

    添加

    #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];
        }];
    }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!