【发布时间】:2016-11-06 17:59:19
【问题描述】:
我有 cloudkit 通知工作。当有人更改记录时,会通知订阅者。我的订阅定义如下:
NSPredicate *searchConditions = [NSPredicate predicateWithFormat:@"%K = %@", CLOUDKIT_PUBLIC_ID_GUID, theCloudGUID];
int subscriptionOptions = CKSubscriptionOptionsFiresOnRecordUpdate | CKSubscriptionOptionsFiresOnRecordDeletion;
CKSubscription *publicSubscription = [[CKSubscription alloc] initWithRecordType:CLOUDKIT_RECORDNAME_PUBLIC_ID
predicate:searchConditions
options:subscriptionOptions];
CKNotificationInfo *notificationInfo = [CKNotificationInfo new];
notificationInfo.alertLocalizationKey = CLOUDKIT_NOTIFICATION_PUBLIC;
notificationInfo.shouldBadge = NO;
notificationInfo.alertBody = CLOUDKIT_NOTIFICATIONBODY_PUBLIC;
publicSubscription.notificationInfo = notificationInfo;
[publicDatabase saveSubscription:publicSubscription completionHandler:^(CKSubscription * _Nullable subscription, NSError * _Nullable error)
{
//error handling
}
问题是,这条记录中有多个字段。我只想在一个特定字段发生变化时提醒订阅者。
在创建订阅时,有没有办法设置搜索谓词来检测特定字段的变化?我阅读了各种 Predicate 文档,但没有看到特别提到这一点。
或者,当收到通知时,有没有办法查看哪些字段发生了变化?在didReceiveRemoteNotification 我试过了:
CKQueryNotification *queryNotification = [CKQueryNotification notificationFromRemoteNotificationDictionary:userInfo];
但是queryNotification.recordFields 为空。
作为最坏的情况,我曾考虑将特定字段拆分为它自己的记录,但是我需要维护更多由公共 GUID 绑定在一起的记录的开销。我希望保持这个更紧凑。
【问题讨论】:
标签: ios apple-push-notifications nspredicate cloudkit cknotification