根據您在評論中的說明,我建議您在創建訂閱時配置.recordFields字典。您可以在此字典中傳遞有限數量的信息,例如記錄類型。當您收到刪除通知時,您可以從通知對象中解壓記錄字段。
您可以在https://developer.apple.com/documentation/cloudkit/ckquerynotification/1428114-recordfields
更新
發現在蘋果的文檔更多信息下面是如何做到這一點。我使用Objective-C,因此您必須理清SWIFT語法。但步驟是:
創建一組記錄我要在通知符
創建訂閱
發送創建NotificationInfo對象,
加入我的期望按鍵陣列到NotificationInfo對象,
使用a創建子設備CKModifySubscriptionsOperation
NSArray *desiredKeys = @[fieldname1, fieldname1, fieldname1];
CKQuerySubscription *subscription = [[CKQuerySubscription alloc] initWithRecordType:recordName
predicate:searchConditions
subscriptionID:subscriptionID
options:fireOn];
CKNotificationInfo *notificationInfo = [CKNotificationInfo new];
notificationInfo.shouldBadge = shouldBadge;
notificationInfo.desiredKeys = desiredKeys;
subscription.notificationInfo = notificationInfo;
CKModifySubscriptionsOperation *subOp = [[CKModifySubscriptionsOperation alloc] initWithSubscriptionsToSave:subsToCreate subscriptionIDsToDelete:subsToDelete];
subOp.modifySubscriptionsCompletionBlock = ^(NSArray<CKSubscription *> *savedSubscriptions,
NSArray<NSString *> *deletedSubscriptionIDs,
NSError *operationError)
{
//do whatever
}
subOp.database = database; //set to either public or private DB
[myQueue addOperation:subOp];
當你收到通知,你剛纔拉的對象背出notificationInfo的:
NSString *value1 = [queryNotification.recordFields objectForKey:fieldname1];
如果不會讓你真正添加RECORDTYPE,那麼你可能需要創建一個自定義字段與一些記錄類型的指示符,然後如上所述傳遞它,或者使用通知中收到的recordID獲取有問題的記錄。
您是否生成'recordID'或者它是CloudKit爲您生成的? CloudKit是否真的不給你任何有關被刪除的CK記錄類型的信息? –
我不確定我遵循:您有多種記錄類型的通知,並且您希望在收到notif時刪除記錄?或者,您收到關於已刪除記錄的通知,並且您正試圖瞭解被刪除的內容? – Thunk
感謝您的回覆! @TomHarrington CloudKit生成recordID,我將它們保存在本地以供識別。 Thunk,當記錄被刪除時,我收到notifs,並且我希望能夠根據該notif刪除該對象的本地版本。你們中的任何一個人都會知道嗎? – Joris416