CKSubscription со сложным предикатом

Я пытаюсь использовать 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

Это выглядит как действительный NSPredicate не может быть должным образом сохранен в CloudKit как часть CKSubscription объект. Это та самая настоящая ошибка Apple или моя?

PS Я перепробовал много разных комбинаций, удалив разные части условия предиката. Похоже, единственное условие для event_type работает нормально, но когда я смешиваю 3 условия с AND - это вызывает проблему.

PPS я использую Xcode 6 beta 6 на OSX 10.10 DP6 а также iOS8 beta 5 на iPhone 5S

ОБНОВИТЬ:

Подписки с одним из следующих предикатов работают нормально:

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 - вот два радара с проблемой получения push-уведомлений CloudKit:

http://openradar.appspot.com/18807663

http://openradar.appspot.com/18798061

Я нашел обходной путь для сохранения CKSubscription правильно через представление IN условие с множеством сравнений равенства. Но на самом деле я не получил push-уведомлений от CLoudKit...

1 ответ

Попробуйте создать объект CKNotification, добавьте его в подписку, прежде чем добавить подписку в базу данных. Также убедитесь, что вы проверяете все методы делегата, относящиеся к удаленному уведомлению, включая didFailToRegisterForRemoteNotificationsWithError. Что касается проблемы предикатов, я бы порекомендовал попробовать NSCompoundPredicate и более детальный обзор Руководства по программированию предикатов для других вариантов.

Другие вопросы по тегам