5 Stimmen

Kern Dateneinfügen mehrerer Objekte

Ist das der richtige Weg, um mehrere Objekte mit Beziehungen zu speichern? Oder gibt es einen Weg, den Code zu verbessern und den Kontext nur einmal zu speichern? Vielen Dank!!

for (NSDictionary *entries in dataArray){
    module = [NSEntityDescription insertNewObjectForEntityForName:@"Modules" inManagedObjectContext:context];
    module.m_id=[entries objectForKey:@"id"];
    module.m_name = [entries objectForKey:@"name"];
    module.m_timestamp = [NSDate date];

    //Diese Zeile verknüpft das Produkt, indem ein Eintrag zur NSSet der Liste für die Modulbeziehung hinzugefügt wird
    [product addModulesObject:module];

    //Diese Zeile verknüpft das Modul mit dem Produkt unter Verwendung der Produktbeziehung
    [module setProduct:product];

    NSError *error = nil;
    if (![context save:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
}

4voto

AndrewShmig Punkte 4703

Sie können diesen Code aus der Schleife heraus bewegen.

NSError *error = nil;
if (![context save:&error]) {
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
     abort();
}

2voto

Antonio MG Punkte 20316

Das Speichern nach jeder erstellten Objekt könnte zu Leistungsproblemen führen, daher ist es besser, zu warten, bis alle Objekte erstellt wurden und den Kontext zu speichern.

Speichern Sie den Kontext einfach, nachdem Sie das Array durchlaufen haben:

for (NSDictionary *entries in dataArray){
    module = [NSEntityDescription insertNewObjectForEntityForName:@"Modules" inManagedObjectContext:context];
    module.m_id=[entries objectForKey:@"id"];
    module.m_name = [entries objectForKey:@"name"];
    module.m_timestamp = [NSDate date];

    //Diese Zeile verknüpft das Produkt durch Hinzufügen eines Eintrags zum NSSet der Liste für die Modulrelation
    [product addModulesObject:module];

    //Diese Zeile verknüpft das Modul mit dem Produkt über die Produktrelation
    [module setProduct:product];
}
NSError *error = nil;
if (![context save:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X