Nicht alle meine Anmerkungen werden in meiner Karte angezeigt, da ich var annotation = MKPoinatAnnotation
nicht die gleiche MKPointAnnotation beim Abrufen der CKrecords (Anmerkung) und beim Abrufen von Anweisungen für eine Anmerkung erstellen kann. Ich bin verwirrt darüber, wie man ein Array für Annotationen erstellt, damit ich alle meine Anmerkungen aus der CloudKit-Datenbank laden kann und in der Lage bin, Anweisungen zu erhalten, wenn die Annotation ausgewählt ist.So erstellen Sie ein Array für Anmerkungen
let annotation = MKPointAnnotation()
let database = CKContainer.default().publicCloudDatabase
var truck: [CKRecord] = []
func fetch() {
let truePredicate = NSPredicate(value: true)
let eventQuery = CKQuery(recordType: "User", predicate: truePredicate)
let queryOperation = CKQueryOperation(query: eventQuery)
queryOperation.recordFetchedBlock = { (record : CKRecord!) in
self.truck.append(record)
self.annotation.title = record["username"] as? String
self.annotation.subtitle = record["hours"] as? String
if let location = record["location"] as? CLLocation {
self.annotation.coordinate = location.coordinate
}
print("recordFetchedBlock: \(record)")
self.mapView.addAnnotation(self.annotation)
}
self.database.add(queryOperation)
}
Wie ich get directions -
@IBAction func getDirections(_ sender: Any) {
let view = annotation.coordinate
print("Annotation: \(String(describing: view))")
let currentLocMapItem = MKMapItem.forCurrentLocation()
let selectedPlacemark = MKPlacemark(coordinate: view, addressDictionary: nil)
let selectedMapItem = MKMapItem(placemark: selectedPlacemark)
let mapItems = [selectedMapItem, currentLocMapItem]
let launchOptions = [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving]
MKMapItem.openMaps(with: mapItems, launchOptions:launchOptions)
}
Leider funktioniert der erste Teil nicht. Ich bin immer noch verwirrt darüber, was ich möchte, wenn ich ein Array vom Typ 'CLLocationCoordinate2D' mache. Danke für die Hilfe tho! – kcamp
Sowohl die Annotation 'CKRecords' als auch' MKPointAnnotation' enthalten Längen- und Breitenkoordinaten. Wenn Sie möchten, dass ein einzelnes Array beide Annotationen enthalten kann, ändern Sie den Typ des Arrays in "CLLocationCoordinate2D". Mit der For-In-Schleife können Sie eine Sammlung von Anmerkungen aufnehmen und sie gleichzeitig derselben Karte hinzufügen. – slickdaddy
Okay, es macht mehr Sinn. Ich bin nicht sicher, wo ich die For-In-Schleife starten soll. Ich habe es in der Abfrage versucht, aber "MKPointAnnotation.coordinate" konnte nicht verwendet werden, wenn ich das tat. Mein Schlechter ich bin etwas, das zum Codieren neu ist, und for Schleifen sind noch zu mir verwirrend ... – kcamp