美文网首页
iOS CoreData

iOS CoreData

作者: Joker_King | 来源:发表于2016-07-02 15:47 被阅读93次

    CoreData核心对象

    • 实体管理类:NSManagedObject
    • 实体描述类:NSEntityDescription
    • 数据管理器类:NSManagedObjectContext
    • 数据连接器类:NSPersistentStoreCoordinator
    • 数据模型器类:NSManagedObjectModel

    CoreData核心类的关系

    CoreData核心类的关系

    CoreData数据框架的核心对象

    持久化储存和存储文件

    • NSPersistentStore:持久化数据储存,是对实际文件的一种Objective-C的一种表示方式,一个被封装好的底层类,用于存储数据。

    被管理上下文

    • NSManagedObjectContext被管理对象上下文,在CoreData中用于操作和使用数据,负责应用和数据库之间的交互。
    • 数据库的保存需要NSManagedObjectContext进行save操作。
    • 数据的查询需要NSManagedObjectContext进行executeFetchRequest操作,返回值是数组。
    • CoreData提供的是对象关系映射,NSManagedObjectContext操作的都是NSManagedObject对象。

    被管理对象相关类

    • NSManagedObjectMode:被管理对象模型,管理多个对象。
    • NSManagedObject:被管理对象,CoreData返回的数据模型,被管理的对象是根据实体描述生成的。
    • NSEntityDescription:实体描述类根据实体创建被管理对象。
    • Entity:实体类,实体是对文件数据的描述,被管理对象标表示实体,实体包含名称,属性(字段)和关系,实体的名称通常被管理对象名称一致。

    数据查询

    • NSFetchRequest:查询请求,可以做排序操作,也可以使用谓词。
    • NSManagedObjectContext:根据NSFetchRequest查询数据,以数组形式返回,数组中包含被管理对象(NSManagedObject)。
    • NSSortDescriptor:排序操作。

    数据持久化的过程

    • 持久化数据的过程:context上下文将对被管理对象的子类进行的所有操作(包括增加,删除,更新等)进行持久化的时候(调用save方法的时候),将所有的操作交给持久化数据协调器(persistentStoreCoordinator),persistentStoreCoordinator(持久化数据协调器)会把对象类型的数据转化成二进制类型的数据,然后存储到文件系统中。
    • 读取过程:持久化数据协调器(persistentStoreCoordinator)从文件系统中读取出二进制的数据,根据实体对象转换成对应的对象类型。将转换好的数据交给上下文来操作。

    示例代码

    往数据库中添加元素

    - (void)addObject{
        NSEntityDescription *description = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.delegate.managedObjectContext];
        Student *stu = [[Student alloc]initWithEntity:description insertIntoManagedObjectContext:self.delegate.managedObjectContext];
        stu.name = @"小明";
        stu.gender = @"男";
        [self.delegate saveContext];
        NSLog(@"%@",NSHomeDirectory());
    }
    

    修改元素

    - (void)changeFromCoreData{
        NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:@"Student"];
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@",@"小明"];
        request.predicate = predicate;
        NSArray *array = [self.delegate.managedObjectContext executeFetchRequest:request error:nil];
        for (Student *stu in array) {
            stu.name = @"小李";
        }
        [self.delegate saveContext];
    }
    

    删除元素

    - (void)delegateFromCoreData{
        NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:@"Student"];
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@",@"小明"];
        request.predicate = predicate;
        NSArray *array = [self.delegate.managedObjectContext executeFetchRequest:request error:nil];
        for (Student *stu in array) {
            [self.delegate.managedObjectContext deleteObject:stu];
        }
        [self.delegate saveContext];
    }
    

    查询元素

    - (void)selectFromCoreData{
        NSFetchRequest *request = [[NSFetchRequest alloc]initWithEntityName:@"Student"];
        NSArray *array = [self.delegate.managedObjectContext executeFetchRequest:request error:nil];
        NSLog(@"%@",array);
    }
    

    相关文章

      网友评论

          本文标题:iOS CoreData

          本文链接:https://www.haomeiwen.com/subject/fzjqjttx.html