2016-05-05 13 views
0

Ich habe eine Entität mit dem Namen Geometry, die mit einer Plot Einheit verbunden ist. In unserem Stück Code, vorausgesetzt, die Plot und einige heruntergeladene Daten in einem NSDictionary gespeichert, müssen wir die Geometry und setzen einige NSString Eigenschaften, aber nachdem ich das getan habe, finde ich, dass die Beziehung zwischen Entitäten verloren ist.Kerndaten-Beziehung verloren nach Bearbeitung verschachteltes Objekt

NSError * saveError = nil; 

NSFetchRequest * request = [[NSFetchRequest alloc] initWithEntityName:[Geometry entityName]]; 
request.predicate = [NSPredicate predicateWithFormat:@"plot == %@", plot]; 
NSError * error = nil; 
NSArray * results = [context executeFetchRequest:request error:&error]; 

Geometry * __block geometry = nil; 

if ([results count] > 0) { 
    [results enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL * stop) { 
     Geometry * geometryObject = obj; 
     if ([geometryObject.gid isEqualToString:[NSString stringWithFormat:@"%@", [data valueForKey:@"gid"]]]) { 
      geometry = geometryObject; 
      stop = YES; 
     } 
    }]; 
} 

if (geometry != nil) { 
    [geometry setPolygon:[NSString stringWithFormat:@"%@", [data valueForKey:@"polygon"]]]; 
} 

if (![context save:&saveError]) { 
    NSLog(@"%@", saveError); 
} 

Das erste Mal, dass ich diesen Code ausführen results haben ein Objekt, aber das nächste Mal, wenn ich diese laufen gibt es keine results.

Gehen Sie davon aus, dass alles außerhalb des Geltungsbereichs dieses Codeelements richtig funktioniert. Irgendein Hinweis oder Anhaltspunkt darüber, warum dies geschieht? Wie kann ich das lösen?

BEARBEITEN: Das Problem wurde außerhalb des Bereichs des veröffentlichten Codes und außerhalb des Bereichs dieser Frage gelöst. Ich hätte den Code genauer überprüfen müssen.

+0

Warum führen Sie die Ergebnisse durch, anstatt das Prädikat zu ändern, um das einzelne 'Geometry'-Objekt an erster Stelle zurückzugeben? – Avi

+0

@Avi Wenn mehr als ein Ergebnis vorhanden ist, werden sie außerhalb des Bereichs dieses Codes verarbeitet. – JordiVilaplana

Antwort

1

Es gibt nichts in Ihrem Code, das die Beziehung unterbricht. Der Fehler muss anderswo sein.

Sie haben ein Plot Objekt, so dass Sie die Geometrien mit plot.geometries ohne Abrufanforderung zu bekommen, und filtern sie ohne Schleife:

Geometry *geometry = [plot.geometries 
    filteredArrayUsingPredicate: [NSPredicate predicateWithFormat:@"gid = %@", gidString]] 
    .firstObject 

wo geometries für plot der Name der inversen Beziehung.

Sie können jetzt die polygon Eigenschaft festlegen und speichern. Überprüfen Sie Ihre setPolygon Methode, wenn Sie die Beziehung nicht entfernen.

+0

Danke für die Antwort, @Mundi. Leider wurde das Problem auf andere Weise gelöst. Erinnern Sie sich an das Zitat 'Nehmen Sie an, dass alles außerhalb des Anwendungsbereichs dieses Codes in meiner Frage richtig funktioniert? Bitte, nimm das nicht an, ich sollte nicht. Upvoted, weil es geholfen hat, meinen Code zu verbessern. – JordiVilaplana

+1

Ich habe die Antwort aktualisiert, damit Sie sie akzeptieren und dieses Problem schließen können. – Mundi

Verwandte Themen