• 【CoreData】 简单地使用


    先介绍一下什么是CoreData —— 它是在iOS5之后出现的一个框架,提供了对象-关系映射(ORM)的功能,既能够将OC对象转化成数据,保存在SQLite数据库文件中,也能将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何SQL语句,类似于著名的Hibernate持久化框架。不过功能肯定没其强大。

    例:平常我们把数据写到数据库需要写:

    insert int Student (name, age) values (xxxx, 12);

    如果全使用CoreData的话则不需要写此句,忽略了上面的语句,远离了SQL语句

    Student *Stu = [ [Employee alloc] init];
    Stu.name = @"xxxx";
    Stu.age = 12;

    CoreData的使用步骤

    // 1.创建模型文件 (相当于一个数据库里的表)

    // New File ———— CoreData ———— Data Model ———— Next【CoreData】 <wbr>简单地使用

    // 2.添加实体 (相当于一张表)

    // 找到我们创建的模型文件(xxx.xcdatamodeld,我创建的叫School.xcdatamodeld———— Add Entity ———— 添加表内属性(这边我添加2个属性(name, age))

    【CoreData】 <wbr>简单地使用

    // 3.创建实体类

    // New File ———— CorData ———— NSManagedobject subclass ———— Next(记得选择需要关联的表)这样就会自动生成相应的模型

    【CoreData】 <wbr>简单地使用

    // 4.生成上下文 关联模型文件生成数据库(关联的时候,如果本地没有数据库文件,CoreData会自己创建)

    // 上下文,记得引用CoreData框架

        NSManagedObjectContext *context = [[NSManagedObjectContext alloc]init];

    // 上下文关联数据库

    // model模型文件参数:mergedModelFromBundles:因为模型文件是资源文件,所以会放到BUNDLES里面,所以只需要写nil就可以了。

        NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];

    // 持久化存储调度器(持久化:把数据保存在一个文件,而不是放在内存中)

        NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];

    // 告诉CoreData数据库的名字和路径

        NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

        

        NSString *sqlitePath = [doc stringByAppendingPathComponent:@"School.sqlite"];

        [store addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nilerror:nil];

        

        context.persistentStoreCoordinator = store;


    然后我们来测试一下是否可以写入数据

    - (void)addStudent

    {

        // 创建一个学生对象

    //    Student *stu = [[Student alloc] init];

        Student *stu =[NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:_context];

        stu.name = @"张三";

        stu.age = @17.0;

        // 直接保存数据库

        [_context save:nil];

        

     

    }


    既然可以保存数据了,那么就肯定需要读取数据
    有个抓取的概念,使用Fetch Request对象进行抓取。看图

    【CoreData】 <wbr>简单地使用

    - (void)readStudent

    {

        // 1.FectchRequest 抓取请求对象

        NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];

        

       // 2.执行请求

      NSArray *stus = [_context executeFetchRequest:request error:nil];

        

      for (Student *stu in stus)

      {

          NSLog(@"名字:%@ 身高:%@", stu.name, stu.age);

      }

        

    }


    接下来是更新


    - (void)updateStudent

    {

        // 1.查找

        // 1.1FectchRequest 抓取请求对象

        NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];

        

        // 1.2设置过滤条件

        // 查找张三

        NSPredicate *pre = [NSPredicate predicateWithFormat:@"name = %@",@"张三"];

        request.predicate = pre;

        

        // 1.3执行请求

        NSArray *stus = [_context executeFetchRequest:request error:nil];

        // 2.更新身高

        for (Student *stu in stus) {

            stu.age = @2.0;

        }

        // 保存

        [_context save:nil];

     

    }



    最后是删除

    - (void)deleteStudent

    {

        // 删除李四

        

        // 1.查找

        // 1.1FectchRequest 抓取请求对象

        NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];

        

        // 1.2设置过滤条件

        // 查找张三

        NSPredicate *pre = [NSPredicate predicateWithFormat:@"name = %@",@"李四"];

        request.predicate = pre;

        

        // 1.3执行请求

        NSArray *stus = [_context executeFetchRequest:request error:nil];

        // 2.删除

        for (Student *stu in stus) {

            [_context deleteObject:stu];

        }

        

        // 3.保存

        [_context save:nil];

    }


    注:CoreData使用场景
    一般在公司内使用较少,用的比较多得时FMDatabases。
    数据存储结构比较简单的时候使用CoreData,开发效率会高点,比较面向对象且不用写SQL语句
    FMDatabases数据结果比较复杂的时候,表与表之间的关联比较多的时候使用

    好了,以上就是CoreData的简单使用,当然了CoreData也可以进行关联,分页等操作。会陆续更新!【CoreData】 <wbr>简单地使用

    DEMO下载地址:链接: http://pan.baidu.com/s/1i3sBsnN 密码: 5kgx

    如果哪里有错或者有什么问题可以随时联系我,转载请注明出处,谢谢!
  • 相关阅读:
    LVS与Nginx区别
    Vue报错:Vue TypeError:Cannot read property ‘xxx‘ of null
    可以这样去理解group by和聚合函数
    52条SQL语句性能优化策略
    阿里云ECS搭建Typecho博客
    Java01——入门
    一天学习一个设计模式之外观模式
    一天学习一个设计模式之组合模式
    一天学习一个设计模式之桥接模式
    一天学习一个设计模式之适配器模式
  • 原文地址:https://www.cnblogs.com/miaomiaoshen/p/5188624.html
Copyright © 2020-2023  润新知