0
var annotation = MKPoinatAnnotation
は、CKrecords(注釈)を取得する際に同じMKPointAnnotationを作成することができず、注釈の指示を取得することができないため、すべての注釈がマップに表示されるわけではありません。私は注釈の配列を作る方法を混乱させるので、CloudKitデータベースからすべての注釈を読み込み、注釈が選択されたときに指示を得ることができるようになります。注釈の配列を作成する方法
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)
}
-
@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)
}
残念ながら、最初の部分は機能しません。私は、あなたが 'CLLocationCoordinate2D'型の配列を作ると、私が試してみたいものにはまだ混乱しています。助けてくれてありがとうtho! – kcamp
'CKRecords'アノテーションと' MKPointAnnotation'の両方に緯度と経度が含まれています。したがって、1つの配列に両方のアノテーションを含めるには、配列の型を 'CLLocationCoordinate2D'のように変更してください。 'for-in'ループは、アノテーションのコレクションを一度に同じマップに追加する方法です。 – slickdaddy
これはもっと理にかなっています。私はfor-inループをどこで開始するのか混乱しています。私はクエリで試しましたが、私がそれを行った場合、 'MKPointAnnotation.coordinate'は使用できませんでした。私の悪い私はコーディングに新しい何か、そしてループのために私はまだ混乱しています... – kcamp