使用 CloudKit 保存尝试对成员“保存(_:completionHandler :)”的模糊引用
Posted
技术标签:
【中文标题】使用 CloudKit 保存尝试对成员“保存(_:completionHandler :)”的模糊引用【英文标题】:Ambiguous reference to member 'save(_:completionHandler:)' with CloudKit save attempt 【发布时间】:2020-01-18 19:31:47 【问题描述】:在更新参考列表并在此代码块的第一行收到错误后,我正在尝试保存回 CloudKit。
错误:对成员 'save(_:completionHandler:)' 的引用不明确
CKContainer.default().publicCloudDatabase.save(establishment) [unowned self] record, error in
DispatchQueue.main.async
if let error = error
print("error handling to come")
else
print("success")
这位于用户将遵循给定位置(Establishment)的功能中。我们正在获取现有机构及其关注者记录,检查所选用户是否在其中,如果没有,则将它们附加到列表中(或者如果关注者列表为空,则创建它)。
Edit, in case helpful
//Both of these are passed in from the prior view controller
var establishment: Establishment?
var loggedInUserID: String?
@objc func addTapped()
// in here, we want to take the logged in user's ID and append it to the list of people that want to follow this establishment
// which is a CK Record Reference
let userID = CKRecord.ID(recordName: loggedInUserID!)
var establishmentTemp: Establishment? = establishment
var followers: [CKRecord.Reference]? = establishmentTemp?.followers
let reference = CKRecord.Reference(recordID: userID, action: CKRecord_Reference_Action.none)
if followers != nil
if !followers!.contains(reference)
establishmentTemp?.followers?.append(reference)
else
followers = [reference]
establishmentTemp?.followers = followers
establishment = establishmentTemp
[这是粘贴在问题顶部的 CKContainer.default.....save 块出现的地方]
我浏览了有关“模糊参考”的各种帖子,但无法找出问题的根源。尝试显式设置 establisthmentTemp 和追随者的类型,以防万一出现问题(基于其他相关帖子的解决方案),但没有运气。 恐怕我作为一个相对缺乏经验的新手没有想法!
帮助表示赞赏。
【问题讨论】:
【参考方案1】:记录我想出的解决方案:
两个问题的结合:
-
我试图保存更新版本的 CK 记录而不是更新
我没有将 CK 记录传递给 save() 调用 - 而是一个自定义对象
(我认为第二点是“对成员的模糊引用”的原因 错误)
我通过将保存尝试(问题中的第一个代码块)替换为:
//first get the record ID for the current establishment that is to be updated
let establishmentRecordID = establishment?.id
//then fetch the item from CK
CKContainer.default().publicCloudDatabase.fetch(withRecordID: establishmentRecordID!) updatedRecord, error in
if let error = error
print("error handling to come")
else
//then update the 'people' array with the revised one
updatedRecord!.setObject(followers as __CKRecordObjCValue?, forKey: "people")
//then save it
CKContainer.default().publicCloudDatabase.save(updatedRecord!) savedRecord, error in
【讨论】:
以上是关于使用 CloudKit 保存尝试对成员“保存(_:completionHandler :)”的模糊引用的主要内容,如果未能解决你的问题,请参考以下文章
保存 CKDatabaseSubscription 得到“CloudKit 访问被用户设置拒绝”
CloudKit,无法将 NSDate 保存到日期/时间字段,“无效日期”