使用" CONTAINS"进行CloudKit订阅谓语

时间:2014-11-07 11:08:57

标签: ios objective-c nspredicate icloud cloudkit

我正在尝试根据测试数组中的成员资格来设置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管理控制台添加或更改记录进行测试时,我从未在设备上收到通知。

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

我还验证了上面列出的谓词在fetch records查询中使用时有效,所以我知道谓词是为CloudKit中的记录类型正确设置的。

是否有人能够通过测试数组成员身份的谓词来获取订阅通知?

1 个答案:

答案 0 :(得分:0)

在玩完之后,我发现除非我设置notificationInfo.alertbody,否则订阅永远不会被解雇。

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

使用iOS 8.1.1 / Xcode 6.1.1