我希望那里有一位经验丰富的 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);
}
}];
无论我传递什么作为 subscriptionID,都没有错误,我在“删除”时看到“成功”。
……是的。显然,这是行不通的。
如果我通过 Cloudkit 仪表板手动删除订阅,我的 -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
然后在完成处理程序中检查它是否是一个有效的订阅,使用: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/