zoukankan      html  css  js  c++  java
  • 【CoreData】表之间的关联

    这次是表之间怎么进行关联,要求如下:
    // 建立学生与班级表之间的联系
    既然是表与表之间的关联,那肯定是要先创建表:

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

    // New File ———— CoreData ———— Data Model ———— Next【CoreData】1.简单地使用


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

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


    【CoreData】1.简单地使用

    //3.在此模型文件内我们再添加第二张表Classes,表内的属性(这边我添加一个属性(classname,classNo))


    【CoreData】表之间的关联

     

    // 4.因为学生肯定是属于某个班级的,所以我们选择学生的表,在表中的Relationships内添加关联。


    【CoreData】表之间的关联
    // 5.添加完关联后我们就需要创建实体了,在创建的过程中,我们会看到school内有2张表(student,classes),因为classes是没有关联任何表的(student则关联依赖classes表),所以先创建classes实体,再创建student的实体。

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

    // 5.1先关联classes表

    【CoreData】表之间的关联

    // 5.2再关联student表

    【CoreData】表之间的关联

    // 5.3生成以下相应模型



    // 6.生成上下文 关联模型文件生成数据库(关联的时候,如果本地没有数据库文件,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;


    然后我们来测试一下

    #pragma mark - 添加

    - (void)addStudent

    {

       // 创建两个班级一班,二班

       Classes*oneClass= [NSEntityDescriptioninsertNewObjectForEntityForName:@"Classes"inManagedObjectContext:_context];

        oneClass.classname= @"一班";

        oneClass.classNo= @(1.0);

        

       Classes*twoClass= [NSEntityDescriptioninsertNewObjectForEntityForName:@"Classes"inManagedObjectContext:_context];

        twoClass.classname= @"二班";

        twoClass.classNo= @(2.0);

        

       // 创建两个学生对象

       Student*zhangsan= [NSEntityDescriptioninsertNewObjectForEntityForName:@"Student"inManagedObjectContext:_context];

        zhangsan.name= @"张三";

        zhangsan.age= @(1.80);

        zhangsan.classNo= oneClass;

        

       Student*lisi= [NSEntityDescriptioninsertNewObjectForEntityForName:@"Student"inManagedObjectContext:_context];

        lisi.name= @"李四";

        lisi.age= @(2.10);

        lisi.classNo= twoClass;

        

       // 直接保存数据库

        [_contextsave:nil];

        

    }


    #pragma mark - 读取

    - (void)readStudent

    {

       // 只读取二班的学生

        

       // 1.FectchRequest 抓取请求对象

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

        

       // 2.设置过滤条件

       //这边直接使用点语法就可以了

       NSPredicate*pre= [NSPredicatepredicateWithFormat:@"classNo.classname= %@",@"二班"];

        request.predicate= pre;

        

       // 4.执行请求

        NSArray*stus = [_contextexecuteFetchRequest:requesterror:nil];

        

        for(Student*stu instus)

        {

           NSLog(@"名字:%@班级:%@",stu.name,stu.classNo.classname);

        }

        

    }


    2015-10-29 22:09:06.519 CoreData表之间的关联[1817:76617]名字:李四班级:二班

    2015-10-29 22:09:06.519 CoreData表之间的关联[1817:76617]名字:李四班级:二班

     

    2015-10-29 22:09:06.519 CoreData表之间的关联[1817:76617]名字:李四班级:二班


    好了,以上就是CoreData表之间的关联,分页等操作。会陆续更新!【CoreData】1.简单地使用

    DEMO下载地址:链接: http://pan.baidu.com/s/1qWtJgw0 密码: wpaa

    如果哪里有错或者有什么问题可以随时联系我,转载请注明出处,谢谢!
  • 相关阅读:
    联想IdeaPad品牌出炉 三款笔记本亮相
    [推荐]2008年必不可少的20个网络产品
    微软公开.NET Base Classes源代码
    [共享一下]Head.First.设计模式.中文版
    IT: 蓝牙十岁了
    祝贺“阿来之家”博客正式开通~
    NodeJS安全设计:好吃的草莓味糖果,只给好朋友小红
    NodeJS文件读取:感恩常在抓把糖果,愉悦客人
    NodeJS缓存机制:畅销货,就多囤一点呗
    安装pygame出现is not a supported wheel on this platform解决办法
  • 原文地址:https://www.cnblogs.com/miaomiaoshen/p/5188642.html
Copyright © 2011-2022 走看看