【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地图