Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从CloudKit到MKPointAnnotation的坐标_Ios_Mapkit_Cloudkit_Cllocation_Mkpointannotation - Fatal编程技术网

Ios 从CloudKit到MKPointAnnotation的坐标

Ios 从CloudKit到MKPointAnnotation的坐标,ios,mapkit,cloudkit,cllocation,mkpointannotation,Ios,Mapkit,Cloudkit,Cllocation,Mkpointannotation,我在CloudKit中将坐标作为位置数据类型(“Koordinaatit”)。我正试图从这些坐标中绘制MKPointAnnotation来映射,但我不知道如何从数组到注释中获取坐标 var sijainnitArray:[CKRecord] = [] func drawPin(sijainti: Int) { let annotation = MKPointAnnotation() annotation.coordinate = CLLocati

我在CloudKit中将坐标作为位置数据类型(“Koordinaatit”)。我正试图从这些坐标中绘制MKPointAnnotation来映射,但我不知道如何从数组到注释中获取坐标

var sijainnitArray:[CKRecord] = []


    func drawPin(sijainti: Int) {

         let annotation = MKPointAnnotation()
         annotation.coordinate = CLLocationCoordinate2D(sijainnitArray[sijainti].Koordinaatit) //XCode shows error: Value of type 'CKRecord' has no memeber 'Koordinaatit'
         self.mapView.addAnnotation(annotation)
}


func fetchRecordsFromCloud() {

        let cloudContainer = CKContainer.default()
        let publicDatabase = cloudContainer.publicCloudDatabase
        let predicate = NSPredicate(value: true)
        let query = CKQuery(recordType: "Sijainti", predicate: predicate)

        publicDatabase.perform(query, inZoneWith: nil, completionHandler: {
            (results, error) -> Void in

            if error != nil {
                print(error)
                return
            }

            if let results = results {
                print("Completed the download of locations data")
                self.sijainnitArray = results
                }
        })

    }



override func viewDidLoad() {
    super.viewDidLoad()

    fetchRecordsFromCloud()

    let sijainnitLkm = sijainnitArray.count - 1

    for i in 0...sijainnitLkm {
        drawPin(sijainti: i)
        }
}



 **ANSWER**

let sijaintilista = self.sijainnitArray[i]

            let sijaintiLatLong = sijaintilista.object(forKey: "Koordinaatit") as? CLLocation
            let sijaintiLat = sijaintiLatLong?.coordinate.latitude
            let sijaintiLon = sijaintiLatLong?.coordinate.longitude

            let sourceLocation = CLLocationCoordinate2D(latitude: sijaintiLat!,  longitude: sijaintiLon!)
            let sourcePlacemark = MKPlacemark(coordinate: sourceLocation, addressDictionary: nil)

            if let location = sourcePlacemark.location {
                annotation.coordinate = location.coordinate
            }

            self.mapView.addAnnotation(annotation)

您想在
CKRecord
上使用方法
对象(forKey:)
。大概你想用的键是“Koordinaatit”


我以前没用过CloudKit。看起来您可以将CLLocation直接保存到
CKRecord

中的locationManager位置作为CLLocation保存到CloudKit CKRecord,问题是我不知道如何将CLLocation添加到MKPointAnnotation。让location=locations.last!let publicDatabase=CKContainer.default().publicCloudDatabase let record=CKRecord(recordType:“Sijainti”)record.setObject(location,forKey:“Koordinaatit”)publicDatabase.save(record,completionHandler:{(record,error)->Void inOk,因此您需要使用
对象(forKey:)
从cloudKit读取记录,然后将其转换为
CLLocation
为我的答案添加了解决方案。谢谢。