我正在尝试使用CKSubscription
这种方式:
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!");
}];
这让我出错:
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
这看起来像 validNSPredicate
不能作为CKSubscription
对象的一部分正确存储在 CloudKit 中。是真正的苹果虫还是我的?
PS我通过删除谓词条件的不同部分尝试了很多不同的组合。看起来event_type
工作正常的唯一条件,但是当我混合 3 个条件时AND
- 这会导致问题。
我在 iPhone 5S 上Xcode 6 beta 6
使用的OSX 10.10 DP6
PPSiOS8 beta 5
更新:
具有以下谓词之一的订阅可以正常工作:
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:
@"(value > %@) AND (prev_value < %@)", @(myValue), @(myValue)];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:
@"(event_type IN %@)", events];
但是使用公共谓词保存订阅失败:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(value > %@) AND (prev_value < %@) AND (event_type IN %@)",
@(myValue), @(myValue), events];
看起来像真正的 Apple CloudKit 错误。刚刚在 bugreport.apple.com 上打开问题 #18105879
更新 2:
感谢@purrrminator - 这里有两个雷达接收 CloudKit 推送通知有问题:
http://openradar.appspot.com/18807663
http://openradar.appspot.com/18798061
我找到了通过使用大量相等比较器CKSubscription
呈现条件来正确保存的解决方法。IN
但实际上我没有收到来自 CLoudKit 的推送通知......