Почему «НЕ В» не работает в этом NSPredicate? - PullRequest
7 голосов
/ 30 января 2012

A. b и B. a являются отношениями, обратными ко многим. Почему этот предикат для A работает:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT SELF IN %@", bObject.a];

пока этого нет:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT %@ IN b", bObject];

Я думаю, что оба предиката должны давать один и тот же результат - набор A s, которые не имеют отношения к bObject через a<-->b. Но на самом деле первый дает правильную коллекцию, а второй нет.

Обновление:


Вот пример проекта , в котором A. b заключен в Account. filtered_clients и B. a воплощен в Client. filtered_by .

Переключите комментирование строки 143 и строки 144 в MasterViewController.m, чтобы увидеть разницу.

Пожалуйста, помогите мне найти ошибку в моем коде или подтвердите, что это ошибка Core Data, чтобы я мог сообщить об этом в Apple. Большое спасибо.

Ответы [ 3 ]

3 голосов
/ 04 февраля 2012

Вот еще одна идея: возможно, он пытается "отрицать" bObject с помощью NOT.Таким образом, попробуйте:

@"NOT (%@ IN b)"
0 голосов
/ 11 декабря 2015

Я думаю, что нашел ответ для людей, которые сталкивались с этим вопросом. Очевидно, вам нужно использовать SELF, чтобы это работало, по крайней мере, в моем случае с отношениями два ко многим. Это работает для меня:

NOT (SELF IN %@)
0 голосов
/ 31 января 2012

Из документации:

Внимание! Вы должны определить отношения «многие ко многим» в обоих направления, то есть вы должны указать два отношения, каждое из которых является обратный другой. Вы не можете просто определить отношение ко многим в одно направление и попробуйте использовать его как многие ко многим. Если вы это сделаете, вы будете в конечном итоге с проблемами ссылочной целостности.

Так проверьте это:

  1. A имеет отношение ко многим к B.
  2. B имеет отношение ко многим A.
  3. Отношение A является обратным отношению B.
  4. Отношение B является обратным отношению A.
...