CoreData基础知识 - 多对多关系数组数据

时间:2011-10-21 08:03:02

标签: iphone core-data

由于我是CoreData的新手并且来自MySQL-DB背景,因此CoreData Moddeling在某些方面很难理解。我相信你可以帮我解决这个基本问题。

CoreData modeling

CoreData模型描述符: 我的数据库模型基本上由两个实体组成。第一个叫做“Manager”,第二个叫做“Zipcodes”。 “经理”有3个属性,目前可以忽略不计。在我看来,重要的是这里称为“zipcodes”的关系。 “Zipcodes”-Entity有一个名为zip的属性,它是一个16 int。它也有一种关系,称为“经理”。

不,我会明白:每位经理都有多个zicodes,他负责所有销售。现在的问题是我已经设置了一个管理器实体,并希望将多个ziplcode链接到他。每个管理器的zipcodes分隔在一个逗号分隔的字符串中。 (12345,56789,...)

首先,我要创建一个Manager实体。

Manager *manager = [NSEntityDescription insertNewObjectForEntityForName:@"Manager" inManagedObjectContext:self.managedObjectContext];

下一步是将所有zicodes分离为数组。

Manager *manager = [NSEntityDescription insertNewObjectForEntityForName:@"Manager" inManagedObjectContext:self.managedObjectContext];

NSArray *zipcodesArray = [[dict objectForKey:@"zipcodes"] componentsSeparatedByString:@","];

for (NSString *zip in zipcodesArray) {
     ???
}

所以现在这就是我陷入困境的地步。后来我必须通过searchBar检查zipcodes,它们应该在数据库中分开。我现在必须为每个邮政编码创建一个managedObjectModel吗?如何将所有这些实体与“一个”经理实体连接起来?我确信有办法实现这一目标,但我真的不知道如何实现。

希望我的问题是可以理解的。如果您想知道任何事情,请随时提出。

谢谢你们!

2 个答案:

答案 0 :(得分:3)

for (NSString *zip in zipcodesArray) {
  NSManagedObject* zipcode = [NSEntityDescription insertNewObjectForEntityName:@"Zipcode" 
                                                  inManagedObjectContext:self.managedObjectContext];
  [zipcode setValue:zip forKey:@"zip"];
  [zipcode setValue:manager forKey:@"manager"];
}

通过在最后一行建立从邮政编码到经理的关系,Core Data将自动负责将zipcode插入从经理回到邮政编码的关系中。

答案 1 :(得分:0)

创建Zipcode的托管对象实例。将该对象的zip属性设置为zipcodesArray中字符串的值。完成后,将托管对象保存到数据存储区,检查错误,然后重复执行,直到完成整个邮政编码阵列为止。