gpt4 book ai didi

iOS15 : NSPersistentCloudKitContainer: how to un-share objects?

转载 作者:行者123 更新时间:2023-12-05 00:23:04 25 4
gpt4 key购买 nike

我正在开发一个应用程序,该应用程序使用 NSPersistentCloudKitContainer 在 iOS 15 中使用新的共享支持.我没有办法告诉 Core Data 一个对象或一组对象不再共享。
例如,如果我创建一组对象,然后调用 share(_:to:completion:) ,对象被正确共享并移动到新的自定义 CKRecordZone ,正如预期的那样。
现在,如果用户停止使用 UICloudSharingController 共享对象, CKShare创建的 Core Data 已从 CloudKit 中正确删除,但对象仍在自定义区域中,Core Data 仍具有原始 CKShare与这些对象相关联。所以,当我调用 fetchShares(matching:) ,我仍然得到 CKShare ,但当然,这不再有效。过去,在我自己的代码中,我会使用 UISharingController s 委托(delegate)获取用户停止共享的通知,然后更新我的模型。但似乎没有办法告诉 Core Data 这个变化。
通过将应用程序移动到后台然后再前台,或者通过停止应用程序并重新启动来强制 Core Data 获取 CloudKit 更改不会导致 Core Data 注意到对共享的更改。
有谁知道如何告诉 Core Data 这些对象不再共享?

最佳答案

我通过始终检查共享是否确实存在于 CloudKit 中来解决这个问题,而不是依赖于 CKShare 的存在。来自 fetchShares(matching:) .我得到 URL来自 CKSharefetchShares(matching:) 返回并称之为:

private func remoteShare(at url: URL) async throws -> CKShare? {
do {
let metadata = try await cloudKitContainer.shareMetadata(for: url)
return metadata.share
} catch let error as CKError {
if error.retryable {
throw RemoteError.retryable
} else if error.userInterventionRequiredError {
throw RemoteError.userInterventionRequired
} else if error.code == .unknownItem {
return nil
} else {
throw RemoteError.remoteFailure
}
} catch {
throw RemoteError.remoteFailure
}
}
}
如果我得到 unknownItem这意味着 Remote 上没有共享,因此该对象实际上并未共享。 RemoteError是我的自定义错误处理,我在 CKError 上有一些扩展对错误进行分类。

关于iOS15 : NSPersistentCloudKitContainer: how to un-share objects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68604023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com