Если Вы знаете, что значения 0 или 1, Вы могли бы сделать flipval ^= 1
.
Оказывается, это еще одна проблема с отсутствующей и / или несогласованной документацией.
Правильный предикат в этом случае следующий:
[NSPredicate predicateWithFormat:@"(excludedOccurrences.@count == 0) OR (0 == SUBQUERY(excludedOccurrences, $sub, $sub.day == %@).@count)", today]
В предикате подзапрос используется для проверки того, равно ли нулю количество связанных excludedOccurrences с датой, соответствующей дате вашего тестирования. Однако документация вводит в заблуждение. Вот что говорится в Руководстве по программированию предикатов относительно использования предикатов в сочетании с отношениями ко многим.
Использование предикатов с отношениями
Если вы используете отношение ко многим, конструкция предиката немного отличается. Если вы хотите получить отделы, в которых хотя бы один из сотрудников имеет имя, например, «Мэтью», используйте оператор ANY, как показано в следующем примере:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"ANY employees.firstName like 'Matthew'"];
Если вы хотите найти отделы, в которых всем сотрудникам платят больше определенной суммы, используйте оператор ALL, как показано в следующем примере:
float salary = ... ;
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"ALL employees.salary > %f", salary];
Довольно любопытно, как решить эту проблему. Я настроил небольшой проект и создал контекст, который вы используете.
NSDate *today = [NSDate date];
NSMutableArray *objects = [NSMutableArray array];
{
NSArray *day = [NSArray arrayWithObjects:today, [today dateByAddingTimeInterval:20.0f], nil];
NSDictionary *excludedDay = [NSDictionary dictionaryWithObject:day forKey:@"day"];
NSDictionary *object = [NSDictionary dictionaryWithObject:excludedDay forKey:@"excludedDay"];
[objects addObject:object];
}
{
NSArray *day = [NSArray arrayWithObjects:[today dateByAddingTimeInterval:20.0f], nil];
NSDictionary *excludedDay = [NSDictionary dictionaryWithObject:day forKey:@"day"];
NSDictionary *object = [NSDictionary dictionaryWithObject:excludedDay forKey:@"excludedDay"];
[objects addObject:object];
}
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NONE excludedDay.day == %@", today];
NSArray *filtered = [objects filteredArrayUsingPredicate:predicate];
NSLog(@"%@", filtered);
Это дает объект, когда:
Это не дает объекту, когда: