注释不会加载到地图上
Annotations won't load on map
一段时间以来,我一直在尝试获取地图上所有注释的方向。我最近发现了如何做到这一点,但现在并不是我所有的注释都会显示在地图上,只有一个会显示。我在 Cloudkit
中使用 public 数据库来存储我所有的用户信息。自从我使变量 annotation = MKPointAnnotation()
可用于整个视图控制器以来,并不是我所有的注释都显示在地图上。
这是我获取路线的方式:
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)
}
这是我显示注释的方式:
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)
}
我现在收到这个错误:
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.
如@Surjeet 所说,在主线程中写入所有 UI 更改。
DispatchQueue.main.async {
self.mapView.addAnnotation(self.annotation)
}
一段时间以来,我一直在尝试获取地图上所有注释的方向。我最近发现了如何做到这一点,但现在并不是我所有的注释都会显示在地图上,只有一个会显示。我在 Cloudkit
中使用 public 数据库来存储我所有的用户信息。自从我使变量 annotation = MKPointAnnotation()
可用于整个视图控制器以来,并不是我所有的注释都显示在地图上。
这是我获取路线的方式:
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)
}
这是我显示注释的方式:
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)
}
我现在收到这个错误:
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.
如@Surjeet 所说,在主线程中写入所有 UI 更改。
DispatchQueue.main.async {
self.mapView.addAnnotation(self.annotation)
}