【问题标题】:CloudKit subscription with "CONTAINS" predicate带有“CONTAINS”谓词的 CloudKit 订阅
【发布时间】:2014-11-07 11:08:57
【问题描述】:

我正在尝试根据数组中的测试成员资格设置 CloudKit 订阅。

我用来创建订阅的代码如下:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"users CONTAINS %@", userID];
CKSubscription *itemSubscription = [[CKSubscription alloc] initWithRecordType:@"foo"
                                                                predicate:predicate
                                                                  options:CKSubscriptionOptionsFiresOnRecordCreation|CKSubscriptionOptionsFiresOnRecordUpdate];

CKNotificationInfo *notificationInfo = [[CKNotificationInfo alloc] init];
[notificationInfo setAlertLocalizationKey:@"Record notification"];
[notificationInfo setShouldBadge:YES];

[itemSubscription setNotificationInfo:notificationInfo];

[database saveSubscription:itemSubscription completionHandler:^(CKSubscription *subscription, NSError *error) {
    NSLog(@"Error: %@, Subscription: %@", error, subscription);
}];

日志显示订阅已成功创建,但是当我通过 CloudKit 管理控制台添加或更改记录进行测试时,我从未在设备上收到通知。

我能够使用其他类型的谓词接收订阅通知(我已经使用简单的真实谓词进行了测试,并且测试了字符串字段的相等性),所以我知道我的通知代码设置正确。

我还验证了上面列出的谓词在用于获取记录查询时有效,因此我知道该谓词已针对我在 CloudKit 中的记录类型正确设置。

有没有人能够通过测试数组成员资格的谓词获得订阅通知?

【问题讨论】:

  • 您是否看到 CloudKit 仪表板中列出的订阅?

标签: ios objective-c nspredicate icloud cloudkit


【解决方案1】:

玩了之后,我发现除非我设置notificationInfo.alertbody,否则订阅永远不会触发。

所以先尝试将其设置为"Test",然后再将其设置为""。我发现它在我将它设置为一个空白字符串后继续工作(虽然我没有尝试将它设置为空白开始),并且作为一个空白字符串它不显示通知,但我的处理程序仍然被调用,这是我所追求的。

使用 iOS 8.1.1 / Xcode 6.1.1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多