2012-05-03 31 views
-1

我有30個房間,每個房間應該有5個同樣的RoomAttributes。我該如何做NSSet更容易保存在CoreData中?

我有Room和RoomAttributes之間的多對多關係。

我的解決方案是創建30 * 5 = 150 RoomAttributes併爲每個房間創建RoomAttribute的NSSet。這是很多工作。

我如何創造一個房間:

Raum *raum = [NSEntityDescription insertNewObjectForEntityForName:@"Raum" inManagedObjectContext:context]; 

raum.raumName = @"Main"; 
raum.etage = @"2. Stock, Raum 1.203"; 
raum.beschreibung = @"Gut beleuchtet"; 
raum.raumpreis = [NSNumber numberWithDouble:210]; 
raum.raumname = @"Besprechungsraum"; 

如何創建RoomAttributes:

Raumattribute *attribute =[NSEntityDescription insertNewObjectForEntityForName:@"Raumattribute" inManagedObjectContext:context]; 
    attribute.attributname = @"Beamer"; 
    attribute.schalter = [NSNumber numberWithBool:NO]; 

    Raumattribute *attribute2 =[NSEntityDescription insertNewObjectForEntityForName:@"Raumattribute" inManagedObjectContext:context]; 
    attribute2.attributname = @"Behindertengerecht"; 
    attribute2.schalter = [NSNumber numberWithBool:NO]; 

如何我創建的NSSet:

NSSet *attributeFurRaum = [NSSet setWithObjects:attribute1, attribute2,nil]; 
raum.raumattribute = attributeFurRaum; 

我怎樣才能使這更容易?

回答

2

** EDITED

啊我看到的 - 對不起,我誤會了原來的問題 - 編輯更容易。

對於我將創建三個輔助方法

-(RaumAttribute*)roomAttributeWithName:(NSString *)name andSchalter:(BOOL)schalter 
{ 
    Raumattribute *att =[NSEntityDescription insertNewObjectForEntityForName:@"Raumattribute" inManagedObjectContext:context]; 
    att.attributname = name; 
    att.schalter = schalter; 
    return att; 
} 

-(NSSet *)roomAttributes 
{ 
    NSArray *atts = [@"Beamer,Behindertengerecht" componentsSeparatedByString:@","]; 
    NSMutableSet *roomAttributes = [NSMutableSet set]; 
    for(NSString *name in atts) 
    { 
     [roomAttributes addObject:[self roomAttributeWithName:name andSchalter:NO]]; 
    } 
    return roomAttributes; 
} 

-(Raum *)raumFromDictionary:(NSDictionary *)details 
{ 
    Raum *raum = [NSEntityDescription insertNewObjectForEntityForName:@"Raum" inManagedObjectContext:context]; 
    raum.raumName = [details valueForKey:@"raumName"]; 
    raum.etage = [details valueForKey:@"etage"]; 
    raum.beschreibung = [details valueForKey:@"beschreibung"]; 
    raum.raumpreis = [details objectForKey:@"raumpreis"]; 
    raum.raumname = [details objectForKey:@"raumname"]; 
    return raum; 
} 

,那麼你可以存儲在一個plist中的預先確定的對象數據或JSON - 它解析爲一個字典,然後去是這樣的:

NSArray *raumDictionaries = //code to get array of dictionaries from a plist or whatever source 
NSSet *raumAttributeSet = [self roomAttributes]; 
for(NSDictionary *raumDict in raumDictionaries) 
{ 
    Raum *raum = [self raumFromDictionary:raumDict]; 
    raum.raumattribute = raumAttributeSet; 
    //save context 
} 
+0

我編輯了我的問題 – Bashud

+0

我更新了我的答案 –

+0

我添加了我的評論 – Manav

相關問題