繁体   English   中英

似乎无法在CloudKit中删除订阅? `-deleteSubscriptionWithID`总是返回true

[英]Seems impossible to delete a subscription in CloudKit? `-deleteSubscriptionWithID` always returns true

我希望有一位经验丰富的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 -fetchAllSubscriptionsWithCompletionHandler:

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

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

但它不会删除我的订阅: 在此输入图像描述

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

在此输入图像描述 在此输入图像描述

...是的。 显然这是行不通的。

如果我通过Cloudkit Dashboard手动删除订阅,我的-fetch调用会正确地注意到并返回一个空数组: 在此输入图像描述

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

我也尝试过使用CKModifySubscriptionsOperation

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

没有结果 :(

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

如果你想确保ID是正确的,你也可以先使用database.fetchAllSubscriptionsWithCompletionHandler({subscriptions, error in获取所有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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM