从当前 iCloud 用户获取 CloudKit 记录
Posted
技术标签:
【中文标题】从当前 iCloud 用户获取 CloudKit 记录【英文标题】:Fetch CloudKit records from current iCloud user 【发布时间】: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)
【问题讨论】:
【参考方案1】:如果您的目标是保存用户的面包屑位置而不是与其他用户共享,那么请使用私有数据库。 这样就可以检索到用户的所有位置记录。
如果您想使用公共数据库,则将 CKReference 类型的条目添加到指向用户记录的位置记录。这样您就可以使用基于用户记录 ID 的谓词
【讨论】:
谢谢,我希望所有位置数据都转到 CloudKit,但我只想在此视图上显示单个用户数据。你能告诉我如何实现你的底层解决方案吗? 汤姆,可悲的是,您的方法存在缺陷;如果用户越过他的路径,则保存将失败,如果两个用户越过彼此的位置,则保存也将失败。您还需要专注于确保以尽可能大的块向云发送最少数量的数据,以使事情尽可能高效。这个想法还依赖于用户在四处走动时有 wifi 连接,虽然完全有可能,但风险很高。更好地将您的面包屑保存在核心数据中,将其完全分组到一个数据块中并将其保存为单个记录。 实现起来很简单,但我不建议使用 publicDB 来存储用户的位置。它将被苹果拒绝。在私有数据库中并且只能由用户自己访问是可以的。以上是关于从当前 iCloud 用户获取 CloudKit 记录的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 CloudKit 从 iCloud 驱动器获取数据
iCloud、CloudKit、iOS 8、Apple id