gpt4 book ai didi

ios - 如何获取已存在共享的 CKShare 对象(以获取共享 URL)

转载 作者:行者123 更新时间:2023-11-29 05:51:58 24 4
gpt4 key购买 nike

我试图允许我的应用程序的用户能够检索他们已经共享的记录的 iCloud 共享链接。我可以在创建共享时通过使用 let share = CKShare(rootRecord: CKRecord) 和 Apple 的 UISharingController 来获取 URL。但是,每次我使用此方法时,旧链接都会失效,并将其他人踢出他们已经加入的共享。如何允许用户(记录所有者)随时获取记录 CKShare 对象的可共享 URL?

//Initially shares the record
let share = CKShare(rootRecord: newRecord)
share[CKShare.SystemFieldKey.title] = "Group" as CKRecordValue?
let modifyRecordsOperation = CKModifyRecordsOperation( recordsToSave: [newRecord, share], recordIDsToDelete: nil)

//Activates the UISharingController (code not shown)

最佳答案

假设记录已共享,您可以通过以下方式获取邀请其他参与者的 URL:

if let shareReference = record.share {
database.fetch(withRecordID: shareReference.recordID) { (share, error) in
let shareURL = (share as? CKShare)?.url
}
}

如果您想再次显示现有共享的 UICloudSharingController(不生成新 URL),您可以这样做:

let sharingController = UICloudSharingController { (_, prepareCompletionHandler) in

func createNewShare() {
let operationQueue = OperationQueue()
operationQueue.maxConcurrentOperationCount = 1

let share = CKShare(rootRecord: record)
share[CKShare.SystemFieldKey.title] = "Title" as CKRecordValue
share.publicPermission = .readWrite

let modifyRecordsOp = CKModifyRecordsOperation(recordsToSave: [share, record], recordIDsToDelete: nil)
modifyRecordsOp.modifyRecordsCompletionBlock = { records, recordIDs, error in
prepareCompletionHandler(share, self, error)
}
modifyRecordsOp.database = database
operationQueue.addOperation(modifyRecordsOp)
}

if let shareReference = record.share {
database.fetch(withRecordID: shareReference.recordID) { (share, error) in
guard let share = share as? CKShare else {
createNewShare()
return
}
prepareCompletionHandler(share, self, nil)
}
} else {
createNewShare()
}
}

关于ios - 如何获取已存在共享的 CKShare 对象(以获取共享 URL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55578404/

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