ios - 似乎无法删除 CloudKit 中的订阅? `-deleteSubscriptionWithID` 总是返回真

标签 ios apple-push-notifications cloudkit

我希望那里有一位经验丰富的 CloudKit 大师,但根据我的谷歌搜索查询,我不确定你是否存在。我认为这可能是 Apple 的一个错误,但我不能确定:\

我可以保存对我的 CKDatabase 的订阅,没问题。

[publicDatabase saveSubscription:subscription completionHandler:^(CKSubscription *subscription, NSError *error) {
    if (error)
    {
        //No big deal, don't do anything.
    }
    else
    {
        [[NSUserDefaults standardUserDefaults] setObject:[subscription subscriptionID] forKey:@"SUBSCRIPTION"];
    }
}];

每当我更改记录中的字段时,我都会收到推送通知,一切都很开心。

我的问题是删除此订阅。

我试过调用-deleteSubscriptionWithID:completionHandler:
正如您在上面的代码片段中看到的,我保存了订阅 ID(还通过调用 -fetchAllSubscriptionsWithCompletionHandler 确认它是正确的订阅 ID:

我在该消息中传递了 subscriptionID,如下所示:

[publicDatabase deleteSubscriptionWithID:[[NSUserDefaults standardUserDefaults] objectForKey:@"SUBSCRIPTION"] completionHandler:^(NSString * _Nullable subscriptionID, NSError * _Nullable error) {
    if( error ) {
        NSLog(@"ERROR: %@", [error description] );
    }
    else
    {
        NSLog(@"SUCCESS: %@", subscriptionID);
    }
}];

但它不会删除我的订阅: enter image description here

无论我传递什么作为 subscriptionID,都没有错误,我在“删除”时看到“成功”。

enter image description here enter image description here

……是的。显然,这是行不通的。

如果我通过 Cloudkit 仪表板手动删除订阅,我的 -fetch 调用会正确注意到并返回一个空数组: enter image description here

所以在这一点上,我确定我在代码中错误地删除了订阅,或者订阅已损坏并且(不太可能)没有人在 SO 或我能找到的任何其他论坛上提问?

我也尝试过使用 CKModifySubscriptionsOperation

   CKModifySubscriptionsOperation *deleteSub = [[CKModifySubscriptionsOperation alloc] initWithSubscriptionsToSave:nil subscriptionIDsToDelete:@[[[NSUserDefaults standardUserDefaults] objectForKey:@"SUBSCRIPTION"]]];
   [publicDatabase addOperation:deleteSub];

没有结果:(

最佳答案

我使用 database.deleteSubscriptionWithID 函数删除订阅。

如果您想确保 ID 正确,您也可以先使用 database.fetchAllSubscriptionsWithCompletionHandler({subscriptions, error in

然后在完成处理程序中检查它是否是一个有效的订阅,使用:if let subscription: CKSubscription = subscriptionObject

然后删除一个或多个使用:database.deleteSubscriptionWithID(subscription.subscriptionID, completionHandler: {subscriptionId, error in

在这里您可以看到我如何删除所有订阅的代码: https://github.com/evermeer/EVCloudKitDao/blob/1bfa936cb46c5a2ca75f080d90a3c02e925b7e56/AppMessage/AppMessage/CloudKit/EVCloudKitDao.swift#L897-897

关于ios - 似乎无法删除 CloudKit 中的订阅? `-deleteSubscriptionWithID` 总是返回真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35618349/

相关文章:

php - 如何使用 CloudKit Web 服务创建 CKReference?

ios - 使用 NSPersistentCloudKitContainer 在用户之间共享核心数据

ios - 如何在 Xcode 4 中发布 json 对象?

ios - 将 NSManagedObject 设置为 nil;

ios - 错误套接字 SO_NOAPNFALLBK 失败 : [42] Protocol not available, 转储回溯

ios - 当应用程序被用户强制退出时如何处理推送通知? [iOS]

ios - Swift:[CoreBluetooth] 解除弹出 Controller 后 XPC 连接无效

c# - 通过 PushSharp.Core 发送 Apple 推送通知停止工作

ios - 苹果推送通知的可靠性

ios - 如何将资源保存到 CloudKit sharedCloudDatabase?