2017-04-10 2 views
0

Ich versuche, die folgenden Daten miteinander zu verknüpfen:Wie kann ich bestimmte Werte von dieser Core Data-Funktion abrufen?

for member in self.markersArray { 
     var coordinate = NSEntityDescription.insertNewObject(forEntityName: "Coordinate", into: managedObjectContext) 
     coordinate.setValue(member.latitude, forKey: "latitude") 
     coordinate.setValue(member.longitude, forKey: "longitude") 
     coordinate.setValue(mapName, forKey: "name") 
    } 

so dass ich später auf dieses Array von Breiten- und Längenwerten von mapName beziehen. Wie kann ich das machen?

Antwort

1

Sie können sicherstellen, dass eine Abrufanforderung ein Array zurückgibt, das nur die Koordinatenobjekte mit einem gegebenen mapName enthält, indem Sie ein Prädikat für die Abrufanforderung angeben, z.

fetchRequest.predicate = NSPredicate(format:"name == %@", yourMapName) 

Aber die gleichen Kartennamen mehrmals speichern, einmal für jede Koordinate ist ineffizient (insbesondere, wenn Sie anschließend die Karte Namen ändern wollen - Sie die relevante alle Objekte Koordinaten aktualisieren). Ein alternativer Ansatz wäre das Hinzufügen einer weiteren Entität (z. B. Map) mit einem Attribut (mapName) und einer to-many-Beziehung (coordinates) zur Koordinateneinheit. Ihre Coordinate-Entität benötigt dann kein name-Attribut, sondern stattdessen eine to-on-Beziehung (map) zu der Map-Entität (die und map Beziehungen sind gegenseitige Inversen). Um „Link zusammen“ die Objekte Koordinaten würde erstellen Sie ein Map Objekt, setzen Sie seine mapName Attribut, und es dann zu map Beziehung zuweisen für jedes Objekt Koordinate:

let newMap = NSEntityDescription.insertNewObject(forEntityName: "Map", into: managedObjectContext) 
newMap.setValue(mapName, forKey:"mapName") 
for member in self.markersArray { 
    var coordinate = NSEntityDescription.insertNewObject(forEntityName: "Coordinate", into: managedObjectContext) 
    coordinate.setValue(member.latitude, forKey: "latitude") 
    coordinate.setValue(member.longitude, forKey: "longitude") 
    coordinate.setValue(newMap, forKey: "map") 
} 
+0

Thank you so much !! Rettete den Tag. – konyv12

+0

Tatsächlich bekomme ich den folgenden Fehler: * Beenden App aufgrund der nicht abgefangenen Ausnahme 'NSInvalidArgumentException', Grund: 'Schlüsselpfadname nicht in der Entität ' gefunden. Was habe ich falsch gemacht? Ich gebe genau das ein, was Sie gesagt haben: fetchRequest.predicate = NSPredate (Format: "name ==% @", farm) -> wo farm ist Name der Karte – konyv12

+0

Wenn Sie Koordinaten abrufen, gehen Sie einfach die Beziehung durch, um auf die Karte zuzugreifen Name: NSPredate (Format: "map.name ==% @", "farm"). – pbasdf

Verwandte Themen