我在Cloudkit的数据库中有多个CKRecords。我将这些CKRecords转换为我的地图注释。自从我在我的查询操作中在我的变量self
之前添加var annotation = MKPointAnnotation()
之后,它只将一个注释加载到我的Map中。为什么这样,我该如何解决?任何帮助都会很棒!
我如何获取记录 -
var points: [MKPointAnnotation] = []
var annotation = MKPointAnnotation()
let database = CKContainer.default().publicCloudDatabase
func fetchTruck() {
let truePredicate = NSPredicate(value: true)
let eventQuery = CKQuery(recordType: "User", predicate: truePredicate)
let queryOperation = CKQueryOperation(query: eventQuery)
queryOperation.recordFetchedBlock = { (record) in
self.points.append(self.annotation)
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)
}
在详细查看您的代码之后,我认为问题在于您始终使用相同的注释。 MKPointAnnotation是一个类,一个引用值,这意味着每次为self.annotation赋值时,都会更改引用,而不是创建新引用。
您正在修改qazxsw poi闭包内的应用UI(mapView)。尝试在主线程中运行修改代码
试试像......
CKQueryOperation