簡體   English   中英

如何在 CloudKit 中刪除訂閱

[英]How to delete a subscription in CloudKit

我想刪除一個特定的訂閱,但我不確定如何獲取訂閱 ID。 刪除訂閱有幾個選項,所有這些都需要提前知道訂閱 ID:

  1. 刪除(withSubscriptionID:completionHandler:)

例子:

let database = CKContainer.default().publicCloudDatabase
database.delete(withSubscriptionID: subscription.subscriptionID) { (result, error) in
   // completed 
}
  1. fetchAllSubscriptions(completionHandler:)

例子:

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

例子:

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)

保存和刪除Core Data記錄,可以使用recordName來獲取CKRecord ID,在Core Data中更容易保存:

let recordID = CKRecord.ID(recordName: recordName)

訂閱是否有類似的東西,或者我是否必須在創建它時保存訂閱 ID? 看起來CKQuerySubscription甚至沒有recordName

[<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)

}])

你是如何創建CKQuerySubscription開始的? 您在創建它時為其指定一個 ID,這就是您知道subscriptionID ID 是什么的方式:

let subscriptionWorkspace = CKQuerySubscription(
  recordType: "YourRecordType",
  predicate: ...,
  subscriptionID: "Your-ID-Goes-Here",
  options: [...]
)

如果您要創建對單個CKRecord的訂閱,那么您可以創建一個subscriptionID如:

"YourRecordType|\(recordName)"

但是,通常有比一次訂閱一個記錄更好的方式來訂閱帶有predicate條件的整個記錄​​類型。

如果您需要進一步的幫助,請添加有關創建CKQuerySubscription的更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM