2011-10-21 29 views
2

由于我对CoreData相当陌生,并且来自MySQL-DB背景,因此CoreData Moddeling在某些时候很难理解。我相信你可以帮助我解决这个基本问题。CoreData基础知识 - 对多关系数组数据

CoreData modeling

CoreData模型描写的特征: 我的数据库模型主要由两个实体组成。第一个叫做“经理”,第二个叫做“Zipcodes”。 “经理”有3个属性,目前可忽略不计。我认为重要的是这种关系称为“邮编”。 “Zipcodes”实体有一个叫做zip的属性,它是一个16 int。它也有一个关系,叫做“​​经理”。

不,我会做到这一点:每位经理都有多个zicode,负责所有销售。现在的问题是我已经设置了一个经理实体,并且想要将多个ziplcodes链接到他。每个管理员的邮编分隔在一个逗号分隔的字符串中。 (12345,56789,...)

首先,我创建一个经理实体。

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检查邮编,他们应该在数据库中分开。我现在必须为每个邮政编码创建一个managedObjectModel吗?我如何将他们全部与“一个”经理实体连接?我确信有办法实现这一点,但我不知道如何。

希望我的问题是可以理解的。如果有什么你想知道的,随时提问。

谢谢你们!

回答

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

通过建立从邮政编码到最后一行的管理者的关系,核心数据将自动插入到邮编从经理回邮编关系的照顾。

+0

啊,相反。我一直认为经理和邮政编码的种类很多。所以我想我必须从经理 - >邮政编码进行连接。谢谢你的帮助!对此,我真的非常感激!顺便说一下,我可以在事后更新实体关系吗? – rdesign

+1

真的没有“事后”。每次您设置邮编的经理字段时,关系(在两个方向上)都会更新。顺便说一下,如果您愿意,还可以修改关系的另一端。在这种情况下,你想做'NSMutableSet * zipCodes = [manager mutableSetValueForKey:@“zipcodes”];'在此之后,你可以修改可变集以修改与管理器相关联的一组邮政编码(再次,从邮编到经理将自动设置)。 – edsko

0

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

+0

感谢您的回答。但是如何将所有的邮编管理对象实例连接到管理器管理对象?稍后我应该能够搜索所有邮编并找到合适的经理。 – rdesign

+0

它看起来像edsko写了我的答案等效的代码。看看那个。 –