【CoreData】表内的关系

这次是发明内怎么进行关联,要求如下:

//
建立学生与班级表之间的关联

既是是表与表之间的干,那必是使先行创造表:

//
1.创办模型文件 (相当给一个数据库里的说明)

//
New File ———— CoreData ———— Data Model ————
Next图片 1

图片 2

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

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

图片 3

图片 4

//3.每当这个模型文件内我们还上加第二张表Classes,表内的性能(这边我加加一个特性(classname,classNo))

图片 5

图片 6

 

//
4.盖学生自然是属有班级之,所以我们选取生的表明,在表中的Relationships内上加关系。

图片 7

图片 8
//
5.添加完关联后我们便需创造实体了,在创建的经过遭到,我们会看出school内发生2张表(student,classes),因为classes是尚未干任何表的(student则提到\依赖classes表),所以先创造classes实体,再创student的实体。

//
New File ———— CorData ———— NSManagedobject subclass
————Next(记得选择用关联的发明)这样尽管见面自动生成相应的模子

// 5.1先关联classes表

图片 9
图片 10

// 5.2再关联student表

图片 11
图片 12

// 5.3十分成以下相应模型

图片 13

//
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表之间的涉嫌,分页等操作。会陆续更新!图片 14

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

要是哪里有摩擦还是有什么问题可天天沟通自己,转载请注明出处,谢谢!

 

网站地图xml地图