是否有一种方式来实现行为-参与者逆转他们对CKShares的接受程度?在参与者接受了CKShares之后,他们会检查共享,说不,我不想为共享贡献任何东西,我甚至不想把共享记录保存在他们的UI界面的监视列表中。
我们如何从这种协作中删除它们(确切地说,从共享数据库中删除)?用例是非常合法的,因为人们可能会接受一些事情,因此在决定是否将自己的时间和精力投入到共享中之前,有机会再过一遍。
我尝试使用CKModifyRecordZonesOperation删除CloudKit共享数据库的共享区域:
var zoneOp = CKModifyRecordZonesOperation(recordZonesToSave: nil, recordZoneIDsToDelete: [zoneID]
zoneOp.database = sharedDB但是,似乎任何共享区域都不能从任何参与者的iOS设备中删除(除了使用可能有效的开发CloudKit仪表板),因为这种尝试之后是CKError --不允许删除区域.
发布于 2022-09-05 18:50:23
来自文档:https://developer.apple.com/documentation/cloudkit/ckshare
如果参与者试图删除共享,则CloudKit将删除该参与者。
删除共享很简单:
try await container.sharedCloudDatabase.deleteRecord(withID: shareRecordId)问题是如何获得原始的CKShare.recordID
全区份额
使用zoneID重新创建区域的共享id。
let shareRecordID = CKRecord.ID(
recordName: CKRecordNameZoneWideShare, // "cloudkit.zoneshare"
zoneID: zone.zoneID
)其他股份
对于其他股票,我认为您在接受该份额时必须存储ID:
func windowScene(
_ windowScene: UIWindowScene,
userDidAcceptCloudKitShareWith cloudKitShareMetadata: CKShare.Metadata
) {
let isZoneWide = (metadata.share.recordID.recordName == CKRecordNameZoneWideShare)
if !isZoneWide {
// Store cloudKitShareMetadata.share.recordID somewhere!
}
let acceptSharesOperation = CKAcceptSharesOperation(
shareMetadatas: [cloudKitShareMetadata]
)
// ... Accept share code here
}您可能还能够获取已接受的份额,但我还没有尝试以下代码:
let query = CKQuery(recordType: "cloudkit.share", predicate: NSPredicate(value: true))
let shares = try await container.sharedCloudDatabase.records(matching: query)https://stackoverflow.com/questions/65925400
复制相似问题