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")
}
Thank you so much !! Rettete den Tag. – konyv12
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
Wenn Sie Koordinaten abrufen, gehen Sie einfach die Beziehung durch, um auf die Karte zuzugreifen Name: NSPredate (Format: "map.name ==% @", "farm"). – pbasdf