首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参与者如何逆转他们对CKShare的接受?

参与者如何逆转他们对CKShare的接受?
EN

Stack Overflow用户
提问于 2021-01-27 18:42:13
回答 1查看 110关注 0票数 2

是否有一种方式来实现行为-参与者逆转他们对CKShares的接受程度?在参与者接受了CKShares之后,他们会检查共享,说不,我不想为共享贡献任何东西,我甚至不想把共享记录保存在他们的UI界面的监视列表中。

我们如何从这种协作中删除它们(确切地说,从共享数据库中删除)?用例是非常合法的,因为人们可能会接受一些事情,因此在决定是否将自己的时间和精力投入到共享中之前,有机会再过一遍。

我尝试使用CKModifyRecordZonesOperation删除CloudKit共享数据库的共享区域:

代码语言:javascript
复制
var zoneOp = CKModifyRecordZonesOperation(recordZonesToSave: nil, recordZoneIDsToDelete: [zoneID]

zoneOp.database = sharedDB

但是,似乎任何共享区域都不能从任何参与者的iOS设备中删除(除了使用可能有效的开发CloudKit仪表板),因为这种尝试之后是CKError --不允许删除区域.

EN

回答 1

Stack Overflow用户

发布于 2022-09-05 18:50:23

来自文档:https://developer.apple.com/documentation/cloudkit/ckshare

如果参与者试图删除共享,则CloudKit将删除该参与者。

删除共享很简单:

代码语言:javascript
复制
try await container.sharedCloudDatabase.deleteRecord(withID: shareRecordId)

问题是如何获得原始的CKShare.recordID

全区份额

使用zoneID重新创建区域的共享id。

代码语言:javascript
复制
let shareRecordID = CKRecord.ID(
    recordName: CKRecordNameZoneWideShare, // "cloudkit.zoneshare"
    zoneID: zone.zoneID
)

其他股份

对于其他股票,我认为您在接受该份额时必须存储ID:

代码语言:javascript
复制
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
}

您可能还能够获取已接受的份额,但我还没有尝试以下代码:

代码语言:javascript
复制
let query = CKQuery(recordType: "cloudkit.share", predicate: NSPredicate(value: true))
let shares = try await container.sharedCloudDatabase.records(matching: query)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65925400

复制
相关文章

相似问题

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