【问题标题】:Fetch CloudKit records from current iCloud user从当前 iCloud 用户获取 CloudKit 记录
【发布时间】:2016-04-07 10:16:21
【问题描述】:

我想从当前登录的用户那里获取所有位置记录。

这会在 CloudKit 上创建位置记录:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    let location = locations.last!
    let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
    addCrumbPoint(center)
    let locationRecord = CKRecord(recordType: "location")
    locationRecord["location"] = location
    let publicData = CKContainer.defaultContainer().publicCloudDatabase
    publicData.saveRecord(locationRecord) { record, error in
    }
}

但是我将如何仅提取当前登录用户的位置记录?

我想用它在地图上创建以前旅程的面包屑,但只是让它打印一个列表将是一个很好的开始!

到目前为止,这是我的代码:

 func getLocationAsync(complete: (instance: CKRecordID?, error: NSError?) -> ()) {
    let container = CKRecordID(recordName: "Location")
    publicDB.fetchRecordWithID(location) { fetchedLocation, error in
        if error != nil {
            print(error!.localizedDescription)
            complete(instance: nil, error: error)
        } else {
            print("fetched Location \(recordID?.recordName)")
            complete(instance: recordID, error: nil)
        }
    }
}

【问题讨论】:

    标签: swift mapkit cloudkit


    【解决方案1】:

    如果您的目标是保存用户的面包屑位置而不是与其他用户共享,那么请使用私有数据库。 这样就可以检索到用户的所有位置记录。

    如果您想使用公共数据库,则将 CKReference 类型的条目添加到指向用户记录的位置记录。这样您就可以使用基于用户记录 ID 的谓词

    【讨论】:

    • 谢谢,我希望所有位置数据都转到 CloudKit,但我只想在此视图上显示单个用户数据。你能告诉我如何实现你的底层解决方案吗?
    • 汤姆,可悲的是,您的方法存在缺陷;如果用户越过他的路径,则保存将失败,如果两个用户越过彼此的位置,则保存也将失败。您还需要专注于确保以尽可能大的块向云发送最少数量的数据,以使事情尽可能高效。这个想法还依赖于用户在四处走动时有 wifi 连接,虽然完全有可能,但风险很高。更好地将您的面包屑保存在核心数据中,将其完全分组到一个数据块中并将其保存为单个记录。
    • 实现起来很简单,但我不建议使用 publicDB 来存储用户的位置。它将被苹果拒绝。在私有数据库中并且只能由用户自己访问是可以的。
    猜你喜欢
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多