在快速

时间:2016-09-06 05:27:38

标签: ios swift function cloudkit ckrecord

我想让用户'位置由此功能更新。最初它是在节省用户和#39;每次都有位置,但我添加了评论下方的代码。如何确保要删除的记录是旧位置?

let locationRecord = CKRecord(recordType: "location")

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
    {
        let location = locations.last
        let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude)
        let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))
        self.mapView.setRegion(region, animated: true)
        self.locationManager.stopUpdatingLocation()//
        locationRecord.setObject(location, forKey: "location")
        let publicData = CKContainer.defaultContainer().publicCloudDatabase
        publicData.saveRecord(locationRecord) { record, error in
        }
            if error == nil
            {
                print("Location saved")
                self.loc1 = location!
            }
        //testing code below
        let operation = CKModifyRecordsOperation(recordsToSave: nil, recordIDsToDelete: [locationRecord.recordID])
        operation.savePolicy = .AllKeys
        operation.modifyRecordsCompletionBlock = { added, deleted, error in
            if error != nil {
                print(error)
            } else {
                print("location updated")
            }
        }
        CKContainer.defaultContainer().publicCloudDatabase.addOperation(operation)
    }

1 个答案:

答案 0 :(得分:1)

正如@Michael所指出的,最好的方法是更新现有的方法。执行此操作的简单方法是首次创建记录,将recordID保存为默认值。例如,

func getRecordToUpdate(locations:[CLLocation])->CKRecord?{
  let defaults = NSUserDefaults.standardUserDefaults()
  var locationRecord:CKRecord

  if defaults.objectForKey("locationRecordID") == nil{
      //Create a new record and save its id
      locationRecord = CKRecord(recordType: "location")
      defaults.setObject(locationRecord.recordID, forKey: "locationRecordID")
      self.updateLocationRecord(locationRecord, locations)
  }else{
      //Fetch the already existing record
      let publicDB = CKContainer.defaultContainer().publicCloudDatabase
      publicDB.fetchRecordWithID((defaults.objectForKey("locationRecordID") as! CKRecordID), completionHandler{
          (record, error) in
          if error == nil{
            self.updateLocationRecord(record, locations)
          }else{
            print("Error fetching previous record")
          }
      }
  }
}

创建一个新功能

func updateLocationRecord(locationRecord:CKRecord, locations:[CLLocation]){
   //Put your code from "let location..." to just above the testing code
   //You may want to fix the block syntax in the call to saveRecord
}

然后在原始的locationManager方法中,取出所有内容并放入

self.getRecordsToUpdate(locations)