尝试在 Swift 中使用来自 CKRecord 的原始数据形式
Posted
技术标签:
【中文标题】尝试在 Swift 中使用来自 CKRecord 的原始数据形式【英文标题】:Trying to use the original form of data from a CKRecord in Swift 【发布时间】:2016-09-04 19:43:52 【问题描述】:我正在尝试将从 cloudkit 下载的 CKRecords 转换回原来的数据形式(在本例中为 CLLocation)。当我尝试在第 17 行调用函数时,出现错误“无法将 'CKRecord' 类型的值转换为预期的参数类型 'CLLocation'”。
func loadLocation(completion: (error:NSError?, records:[CKRecord]?) -> Void)
let query = CKQuery(recordType: "Location", predicate: NSPredicate(value: true))
CKContainer.defaultContainer().publicCloudDatabase.performQuery(query, inZoneWithID: nil)
(records, error) in
if error != nil
print("error fetching locations: \(error)")
completion(error: error, records: nil)
else
print("found locations: \(records)")
completion(error: nil, records: records)
guard let records = records else
return
for(var i = 0; i<records.count; i += 1)
addBoundry(records[i])
【问题讨论】:
【参考方案1】:通过将记录的键设置到您的位置来保存您的记录:
recordThatYouAreSaving.setObject(yourLocation, forKey: "location")
然后得到它:
addBoundry(records[i]["location"] as! CLLocation)
【讨论】:
我收到警告“从 'CKRecord' 转换为不相关的类型 'CLLocation' 总是失败”【参考方案2】:即使查询值为 CLLocation 的记录,查询的结果仍然是 CKRecord 的数组,而不是 CLLocation 的数组。如果 CKRecord 包含 CLLocation,您需要通过调用 objectForKey:
来提取它并将其转换到 CLLocation。
【讨论】:
我在哪里叫它@matt 显然,无论您在哪里遇到错误。我的意思是,看,当你创建这个 CKRecord 并将值放入其中时,你使用了一个键,对吧?现在您需要该密钥来获取值。否则,你以为钥匙是干什么用的? 我收到错误“无法转换 'CKRecordValue?' 类型的值?”到预期的参数类型 'CLLocation'" 你需要cast它。以上是关于尝试在 Swift 中使用来自 CKRecord 的原始数据形式的主要内容,如果未能解决你的问题,请参考以下文章
如何从来自 fetchAllSubscriptionsWithCompletionHandler 的 CKSubscriptionID 中检索 CKRecord?
如果 Swift 中存在 NSUserDefault,则尝试更新 CLLocation