现在的位置: 首页 > 综合 > 正文

CoreData笔记

2018年03月20日 ⁄ 综合 ⁄ 共 2786字 ⁄ 字号 评论关闭

Core Data

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

2.CoreData不是数据库,CoreData可以使用数据库,XML等方式来存储数据;

3.SQLite通过SQL语句操作数据,CoreData使用面向对象的方式操作数据;

4.使用CoreData操作数据,不需要写任何SQL语句;

5.使用CoreData,需要导入CoreData框架。

CoreData关系图


如下CoreData分为五个模块

1. NSManagedObjectContext 负责应用和数据库之间的交互(CRUD);

2. NSPersistentStoreCoordinator添加持久化存储库(SQLite数据库)是物理数据存储的物理文件和程序之间联系的桥梁,负责管理不同对象的上下文;

3.NSManagedObjectModel被管理的对象模型,对应定义的模型文件;

4.NSEntiityDescription实体描述。

NSManagedObjectModel用来加载数据模型文件

    NSURL *url = [[NSBundle mainBundle] URLForResource:@"DataModel" withExtension:@"momd"];
    NSManagedObjectModel *dataModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];

NSPersistentStoreCoordinator用来打开数据库

    NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinatoralloc] initWithManagedObjectModel:dataModel];
//定义数据库文件路径
    NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"/Documents/coreData.sqlite"];
    NSURL *dbURL = [NSURL fileURLWithPath:filePath];

</pre><p class="p9"><span class="s9">//</span>打开数据库文件<span class="s10">    </span></p><p class="p11"></p><pre name="code" class="html">/**
*  1.如果文件不存在,则新创建数据库文件
   2.如果文件存在,则直接打开
*/
 
   NSError *error = nil;
    [store addPersistentStoreWithType:NSSQLiteStoreType
                        configuration:nil
                                  URL:dbURL
                              options:nil
                                error:&error];
//对数据进行操作
    context = [[NSManagedObjectContext alloc] init];//    NSManagedObjectContext *context;为全局变量
    context.persistentStoreCoordinator = store;

NSManagedObjectContext常用方法

将数据对象保存到数据文件

-save:将⼀一个数据对象标记为删除,但是要等到 Context
提交更改时才真正删除数据对象

-deleteObject:

回滚最后⼀一步操作,这是都 undo/redo 的⽀支持

 -undo还原数据⽂文件内容

-rollback

清除缓存的 Managed Objects

只应当在添加或删除 Persistent Stores 时使⽤用

-reset执⾏行 Fetch Request 并返回所有匹配的数据对象!

-executeFetchRequest: error:

    User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:context];
    user.userID = @"1003";
    user.age = @33;
    user.name = @"davie";
//添加mo对象
    [context insertObject:user];

//删除mo对象
    [context deleteObject:user];
//查询
    //1.创建查询请求对象
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
    //2.定义查询条件
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age > 25 && name LIKE 'd*'"];
    request.predicate = predicate;
    //3.让context执行查询操作
    NSArray *array = [context executeFetchRequest:request error:nil];
//修改
    //1.将需要修改的MO查询出来
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
    //定义条件,查询需要修改的用户
    request.predicate = [NSPredicate predicateWithFormat:@"userID='1002'"];
    NSArray *result = [context executeFetchRequest:request error:nil];
    //2.修改
    for (User *user in result) {
        user.name = @"张三";
        user.age = @45;
    }
    //3.保存
    [context save:nil];
//删除
    //1.将需要删除的MO查询出来
    //1.将需要修改的MO查询出来
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
    //定义条件,查询需要修改的用户
    request.predicate = [NSPredicate predicateWithFormat:@"userID='1002'"];
    NSArray *result = [context executeFetchRequest:request error:nil];
    //2.删除
    for (User *user in result) {
        //将user从context中删除
        [context deleteObject:user];
    }
    //3.保存
    [context save:nil];

    

-com.apple.CoreData.SQLDebug

1

抱歉!评论已关闭.