首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在CloudKit中删除订阅

如何在CloudKit中删除订阅
EN

Stack Overflow用户
提问于 2020-09-23 20:56:31
回答 1查看 162关注 0票数 0

我想删除特定的订阅,但我不确定如何获得订阅ID。有几个选项可以删除订阅,所有这些都要求预先知道订阅ID:

  1. 删除(带有withSubscriptionID:completionHandler:)

示例:

代码语言:javascript
复制
let database = CKContainer.default().publicCloudDatabase
database.delete(withSubscriptionID: subscription.subscriptionID) { (result, error) in
   // completed 
}
  1. fetchAllSubscriptions(completionHandler:)

示例:

代码语言:javascript
复制
let database = CKContainer.default().publicCloudDatabase
database.fetchAllSubscriptions { subscriptions, error in
    if error == nil {
        if let subscriptions = subscriptions {
            // find the subscription ID of my choice and use the method from #1 to delete
        }
    } else {
        print(error!.localizedDescription)
    }
}
  1. CKModifySubscriptionsOperation

示例:

代码语言:javascript
复制
let operation = CKModifySubscriptionsOperation(subscriptionsToSave: [], subscriptionIDsToDelete: [subscriptionID])
operation.modifySubscriptionsCompletionBlock =  {
    (modifiedSubscriptions: [CKSubscription]?, deletedSubscriptionIDs: [String]?, error: Error?) -> Void in

    if error != nil {
        print(error!.localizedDescription)
    } else {
        print("Success!")
    }
}
operation.qualityOfService = .utility
privateDatabase.add(operation)

为了保存和删除核心数据记录,可以使用recordName获取CKRecord ID,这在CKRecord数据中更容易保存:

代码语言:javascript
复制
let recordID = CKRecord.ID(recordName: recordName)

对于订阅是否存在类似的内容,还是在创建订阅ID时必须保存订阅ID?看起来CKQuerySubscriptionrecordName都没有

代码语言:javascript
复制
[<CKQuerySubscription: 0x283a3be40; ; Query Subscription: recordType=Progress, predicate=userId == "_sdfd1cedfea6965asdfdsc58e3d", subscriptionOptions=1, subscriptionID=SDF23BB6B-2C15-4F4D-BE7F-DF234GS, zoneID=(null)>
{
    alertBody -> New Post!
    alertLocalizationKey -> "(null)
    alertLocalizationArgs -> []
    title -> My App
    titleLocalizationKey -> "(null)
    titleLocalizationArgs -> []
    subtitle -> (null)
    subtitleLocalizationKey -> "(null)
    subtitleLocalizationArgs -> []
    alertActionLocalizationKey -> (null)
    alertLaunchImage -> (null)
    soundName -> default
    desiredKeys -> []
    shouldBadge -> NO
    shouldSendContentAvailable -> NO
    shouldSendMutableContent -> NO
    category -> (null)
    collapseIDKey -> (null)

}])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-24 19:21:34

首先,如何创建CKQuerySubscription?在创建它时为它指定一个ID,这就是您知道subscriptionID是什么的方式:

代码语言:javascript
复制
let subscriptionWorkspace = CKQuerySubscription(
  recordType: "YourRecordType",
  predicate: ...,
  subscriptionID: "Your-ID-Goes-Here",
  options: [...]
)

如果要创建单个CKRecord的订阅,则可以创建如下所示的subscriptionID

代码语言:javascript
复制
"YourRecordType|\(recordName)"

但是,通常有更好的方法使用predicate条件订阅整个记录类型,而不是一次订阅记录。

如果您需要进一步的帮助,请添加有关创建您的CKQuerySubscription的更多细节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64036094

复制
相关文章

相似问题

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