我有兴趣检查是否共享了一个RecordZone。当我共享一个区域时,我知道在该区域中创建了一个共享记录。在苹果的CloudKit示例中,它检查是否共享了特定记录:
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
时,即使该区域是共享的,它的值也是零。
发布于 2022-05-02 02:22:47
我相信在下面用黑体字显示的CKShare文档中解释了这一点:
CloudKit保存共享后,参与者可以获取相应的元数据,其中包括对共享的引用、用户参与的信息,以及共享层次结构中的根记录的记录ID。使用共享的CKFetchShareMetadataOperation创建一个CKFetchShareMetadataOperation实例,并将其添加到容器的队列中执行。该操作为您提供的每个URL返回一个CKShare.Metadata实例。这仅适用于手动处理共享验收。如果用户接收到共享URL并点击或单击它,CloudKit将自动处理他们的参与。 若要确定获取的共享的配置,请检查其recordName属性的recordID。如果值为CKRecordNameZoneWideShare,则共享正在管理共享记录区域;否则,它将管理共享记录层次结构。
let isZoneWide = (metadata.share.recordID.recordName == CKRecordNameZoneWideShare)
https://stackoverflow.com/questions/72081319
复制相似问题