2017-12-19 6 views
0

var annotation = MKPoinatAnnotationは、CKrecords(注釈)を取得する際に同じMKPointAnnotationを作成することができず、注釈の指示を取得することができないため、すべての注釈がマップに表示されるわけではありません。私は注釈の配列を作る方法を混乱させるので、CloudKitデータベースからすべての注釈を読み込み、注釈が選択されたときに指示を得ることができるようになります。注釈の配列を作成する方法

I行き方を調べる方法
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) 
} 

答えて

0

私は、検索クエリに応じて、配列の内容が変化すると仮定しています。

for point in points { 
    mapView.addAnnotation(point) 
} 
を:次に、しかし、あなたはそれを記入し、各反復は、マップにポイントを追加することにより、ループを通してそれを実行し、配列を埋める

var points: [MKPointAnnotation] = [] 

:その場合は、タイプMKPointAnnotationの配列を作ります

さまざまな種類の注釈に問題がある場合は、タイプCLLocationCoordinate2Dの配列を作成し、次にMKPointAnnotation.coordinateにアクセスして配列を塗りつぶすことができます。

これは役に立ちますか?

+0

残念ながら、最初の部分は機能しません。私は、あなたが 'CLLocationCoordinate2D'型の配列を作ると、私が試してみたいものにはまだ混乱しています。助けてくれてありがとうtho! – kcamp

+1

'CKRecords'アノテーションと' MKPointAnnotation'の両方に緯度と経度が含まれています。したがって、1つの配列に両方のアノテーションを含めるには、配列の型を 'CLLocationCoordinate2D'のように変更してください。 'for-in'ループは、アノテーションのコレクションを一度に同じマップに追加する方法です。 – slickdaddy

+0

これはもっと理にかなっています。私はfor-inループをどこで開始するのか混乱しています。私はクエリで試しましたが、私がそれを行った場合、 'MKPointAnnotation.coordinate'は使用できませんでした。私の悪い私はコーディングに新しい何か、そしてループのために私はまだ混乱しています... – kcamp

関連する問題