У меня есть две сущности в CoreData, которые называются «Пользователь» и «Купон», они связаны отношениями «многие ко многим». Я хотел получить все купоны, кроме тех, которые принадлежат user.userId = 1, где userId - это NSString.

Я использовал: [NSPredicate predicateWithFormat:@"NOT(ANY couponOwners.userId = %@)", @"4"]; быть предикатом моего fetchedResultsController

Но не фильтрация с правильными результатами. У одного из пользователей в списке «Владелец купона» все еще используется userId = 4.

Может кто-нибудь помочь? Я застрял довольно долго. Заранее спасибо.

5
John 31 Мар 2013 в 00:03

1 ответ

Лучший ответ

Предикаты Core Data с «NOT ANY» не работают (похоже, это ошибка Core Data). На самом деле

[NSPredicate predicateWithFormat:@"NOT(ANY couponOwners.userId = %@)", @"4"];

Возвращает тот же набор результатов, что и

[NSPredicate predicateWithFormat:@"ANY couponOwners.userId != %@", @"4"];

Что, конечно, неправильно. В качестве обходного пути вы можете использовать ПОДЗАПРОС:

[NSPredicate predicateWithFormat:@"SUBQUERY(couponOwners, $c, $c.userId == %@).@count == 0", @"4"]
11
Martin R 31 Мар 2013 в 00:39
1
Ты такой умный. Большое тебе спасибо.
 – 
John
31 Мар 2013 в 23:00
R, у меня проблема с формированием правильного предиката, поскольку я вижу, что вы очень хорошо понимаете это поле. Не могли бы вы помочь с этой проблемой? stackoverflow.com/questions/37464898/…?
 – 
Melany
27 Май 2016 в 11:43