-1

30 の部屋があり、各部屋には 5 つの同じ RoomAttributes が必要です。

Room と RoomAttributes の間に多対多の関係があります。

私の解決策は、30 * 5 = 150 の RoomAttributes を作成し、すべての Room に対して RoomAttributes の 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;

どうすればこれを簡単にできますか?

4

1 に答える 1

2

**編集済み

なるほど - 申し訳ありませんが、元の質問を誤解していました - 編集により簡単になりました。

そのために、3 つのヘルパー メソッドを作成します。

-(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
}
于 2012-05-03T08:50:31.450 に答える