2017-12-11 17 views
0

私はしばらくの間、地図上の注釈への道順を調べようとしています。私は最近、それを行う方法を見つけましたが、今はすべての注釈が地図に表示されるわけではありません。私はCloudkitの公開データベースを使用して、すべてのユーザー情報を保管しています。私が変数annotation = MKPointAnnotation()をView Controller全体で使用できるようにして以来、すべての注釈が地図上に表示されているわけではありません。注釈は地図上に表示されません

これは、私が方向を取得する方法:これは私が私の注釈を表示する方法です

let annotation = MKPointAnnotation() 

@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) 
} 

を:@として

This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes. 
+3

このエラーは、バックグラウンドスレッドでUIの変更を行っていることを示しています。そのため、このエラーログに直面しています。コードを更新し、メインスレッドのすべてのUIの変更を書き込んでください。 – Surjeet

答えて

2

:私は今、このエラーを取得してい

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) 
    } 

    queryOperation.queryCompletionBlock = { (cursor, error) in 

     print("queryCompletionBlock: \(self.truck)") 
    } 

    database.add(queryOperation) 
} 

Surjeetさんは、メインスレッドですべてのUI変更を書きます。

DispatchQueue.main.async { 
    self.mapView.addAnnotation(self.annotation) 
} 
+0

ありがとう!私は主なスレッドについて強調していた、私は間違った場所にdispatchQueueを入れていた。私は、コントローラ全体で「let annotation = mkpointannotation()」を使用できるようにすると、マップが1つの注釈しか表示しない方法についてはまだ混乱しています。 – kcamp

関連する問題