2016-02-25 190 views
3

我希望有一個經驗豐富的CloudKit專家,但基於我的谷歌搜索查詢,我不知道你是否存在。我認爲這可能是蘋果的一個bug,但我不能確定:\似乎無法刪除CloudKit中的訂閱? `-deleteSubscriptionWithID`總是返回true

我可以保存訂閱我的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(也證實它是正確的訂閱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); 
    } 
}]; 

但它不會刪除我的訂閱: enter image description here

無論我作爲subscriptionID傳遞什麼,都沒有錯誤,並且在「刪除」時看到「SUCCESS」。

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]; 

沒有結果:(

回答

4

我使用database.deleteSubscriptionWithID功能刪除訂閱嘗試。

如果你想確保該ID是正確的你也可以首先使用database.fetchAllSubscriptionsWithCompletionHandler({subscriptions, error in

然後在完成處理程序chec k如果它是一個使用有效的訂閱: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