为什么在我的QueryOperation中“自我”阻止来自CloudKit的数据

问题描述 投票:0回答:1

我在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)

}
ios swift mapkit cloudkit
1个回答
1
投票

在详细查看您的代码之后,我认为问题在于您始终使用相同的注释。 MKPointAnnotation是一个类,一个引用值,这意味着每次为self.annotation赋值时,都会更改引用,而不是创建新引用。

您正在修改qazxsw poi闭包内的应用UI(mapView)。尝试在主线程中运行修改代码

试试像......

CKQueryOperation
© www.soinside.com 2019 - 2024. All rights reserved.