首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何检查RecordZone是否与CloudKit共享?

如何检查RecordZone是否与CloudKit共享?
EN

Stack Overflow用户
提问于 2022-05-02 00:18:44
回答 1查看 91关注 0票数 1

我有兴趣检查是否共享了一个RecordZone。当我共享一个区域时,我知道在该区域中创建了一个共享记录。在苹果的CloudKit示例中,它检查是否共享了特定记录:

代码语言:javascript
代码运行次数:0
运行
复制
func fetchOrCreateShare(contact: Contact) async throws -> (CKShare, CKContainer) {
   guard let existingShare = contact.associatedRecord.share else {
    let share = CKShare(rootRecord:contact.associatedRecord)      
   share[CKShare.SystemFieldKey.title] = "Contact: \.(contact.name)" 
    _ = try await database.modifyRecords(saving:[contact.associatedRecord, share], deleting: []). 
    return (share, container)
  }
  guard let share = try await database.record(for: existingShare) as? CKShare else {
    throw ViewModelError.invalidRemoteShare
  }
  return (share, container)
}

方法guard let existingShare = contact.associatedRecord.share的第一行检查是否共享了特定记录,但对于共享区域(给定区域名称),如何检查该区域的.share?当我尝试CKRecordZone(zoneName: "Contacts").share时,即使该区域是共享的,它的值也是零。

EN

回答 1

Stack Overflow用户

发布于 2022-05-02 10:22:47

我相信在下面用黑体字显示的CKShare文档中解释了这一点:

CloudKit保存共享后,参与者可以获取相应的元数据,其中包括对共享的引用、用户参与的信息,以及共享层次结构中的根记录的记录ID。使用共享的CKFetchShareMetadataOperation创建一个CKFetchShareMetadataOperation实例,并将其添加到容器的队列中执行。该操作为您提供的每个URL返回一个CKShare.Metadata实例。这仅适用于手动处理共享验收。如果用户接收到共享URL并点击或单击它,CloudKit将自动处理他们的参与。 若要确定获取的共享的配置,请检查其recordName属性的recordID。如果值为CKRecordNameZoneWideShare,则共享正在管理共享记录区域;否则,它将管理共享记录层次结构。 let isZoneWide = (metadata.share.recordID.recordName == CKRecordNameZoneWideShare)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72081319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档