首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复谓词CKSubscription

复谓词CKSubscription
EN

Stack Overflow用户
提问于 2014-08-22 08:54:08
回答 1查看 590关注 0票数 2

我试图以这种方式使用CKSubscription

代码语言:javascript
复制
NSArray *events = @[@1,@2,@3];
NSInteger myValue = 100;

NSPredicate *predicate = [NSPredicate predicateWithFormat:
    @"(value > %@) AND (prev_value < %@) AND (event_type IN %@)",
    @(myValue), @(myValue), events];

CKSubscription *sub = [[CKSubscription alloc] initWithRecordType:@"TableName"
    predicate:predicate options:(CKSubscriptionOptionsFiresOnRecordCreation)];

[db saveSubscription:sub completionHandler:^(CKSubscription *s, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error.localizedDescription);
        return;
    }
    NSLog(@"Success!");
}];

这让我犯了错误:

代码语言:javascript
复制
Error: Error saving record subscription with id 781FB482-C9C9-4DA5-8022-CFDB8006223A to server:
invalid attempt to set value type NUMBER_INT64 for field 'binding_0' for type
'_sub_trigger_sub_220b17724b5262b0590a3c9d66be9826', defined to be: INT64_LIST

这看起来像有效的NSPredicate不能作为CKSubscription对象的一部分正确地存储在CloudKit中。是真的苹果虫还是我的?

通过去掉谓词条件的不同部分,我尝试了许多不同的组合。看起来event_type的唯一条件很好,但是当我将3种条件与AND混合时--这会导致一个问题。

我在OSX 10.10 DP6上使用OSX 10.10 DP6,在iPhone 5S上使用iOS8 beta 5

更新:

以下谓词之一的订阅工作正常:

代码语言:javascript
复制
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:
    @"(value > %@) AND (prev_value < %@)", @(myValue), @(myValue)];

NSPredicate *predicate2 = [NSPredicate predicateWithFormat:
    @"(event_type IN %@)", events];

但是使用公共谓词保存订阅失败:

代码语言:javascript
复制
NSPredicate *predicate = [NSPredicate predicateWithFormat:
    @"(value > %@) AND (prev_value < %@) AND (event_type IN %@)",
    @(myValue), @(myValue), events];

看起来像真正的苹果CloudKit缺陷。刚刚在bugreport.apple.com #18105879发行

更新2:

感谢@purrrminator以下是两个在接收CloudKit推送通知时遇到问题的雷达:

http://openradar.appspot.com/18807663

http://openradar.appspot.com/18798061

通过使用大量相等的比较器表示CKSubscription条件,我找到了适当保存IN的解决办法。但实际上我没有收到CLoudKit的推送通知..。

EN

回答 1

Stack Overflow用户

发布于 2016-01-30 17:43:12

尝试创建CKNotification对象,在将订阅添加到数据库之前将其添加到订阅中。还要确保检查与远程通知相关的所有委托方法,包括didFailToRegisterForRemoteNotificationsWithError.。关于谓词问题,我建议尝试NSCompoundPredicate,并对谓词编程指南进行更深入的回顾,以寻找其他选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25443133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档