Настройка NSPredicate с несколькими условиями

Я не уверен, как можно было бы «каскадировать» несколько условий в NSPredicate.

Я довольно новичок в Core Data и не уверен, что это правильный способ добиться того, что я ищу.

Вот что я пытаюсь сделать:

Существует объект Photo, у которого есть отношение whereTook к объекту Location, у которого есть инверсия photosTookThere.

Фотография в свою очередь имеет атрибут NSNumber, называемый isFavourite.

Я хотел бы настроить NSFetchRequest, который сначала проверяет, что photosTookThere существует, и если да, проверьте каждый полученный объект Photo и верните только те, которые установлены как избранные.

Вот код до сих пор:

request.entity = [NSEntityDescription entityForName:@"Location" inManagedObjectContext:context]; request.sortDescriptors = [NSArray arrayWithObject[NSSortDescriptorsortDescriptorWithKey:@"locationId" ascending:YES]]; request.predicate = [NSPredicate predicateWithFormat:@"photosTookThere.@count != 0"]; 

Как бы я каскадировал второе условие в предикат и вернул правильные результаты?

3 Solutions collect form web for “Настройка NSPredicate с несколькими условиями”

Просто поставьте каждое условие в круглые скобки и соедините их с AND.

 [NSPredicate predicateWithFormat:@"(photosTookThere.@count != 0) AND (isFavourite == %@)", [NSNumber numberWithBool:YES]]; 

Я также рекомендую изменить название вашего отношения «whereTook» к «местоположению», а ваши «photosTookThere» – просто «фотографии», это больше соответствует соглашению.

В конечном итоге я смог решить это, используя подзапрос:

 request.predicate = [NSPredicate predicateWithFormat: @"(photosTookThere.@count !=0) AND SUBQUERY(photosTookThere, $Photo, $Photo.isFavourite==1).@count >0" ]; 

Вы можете просто использовать AND и OR в своем предикате так же, как если бы вы указали условие «где» в инструкции SQL. Чтобы проверить NULL, который, по-видимому, вам нужен при сравнении с «whereTook», вы можете сравнить с nil (whereTook = nil).

  • Как я могу исправить сбой при нажатии, чтобы выбрать строку после прокрутки таблицы?
  • Время компиляции Xcode очень медленно после обновления до Mavericks
  • Ручное и неадаптивное руководство Segues
  • Настройка элементов управления @IBInspectable Attribute Inspector
  • Где Xcode хранит $ {PRODUCT_NAME} в файловой системе?
  • UIApplicationDelegate в интерфейсе Builder с Xcode 4.2
  • Как скомпилировать автоматически созданные приложения для iOS?
  • Xcode: libpods.a - красный
  • как добавить xib-файл в статическую библиотеку в iOS
  • Мое приложение разбивается на UIDocumentPickerViewController
  • Как создать относительные ограничения в xcode 5?
  • Interesting Posts

    Как настроить UIAlertController с UITableView или имеется ли какой-либо элемент управления по умолчанию, подобный этому пользовательскому интерфейсу в приложении «Страницы»?

    Переключение настроек конфиденциальности приведет к урону приложения

    Приложение iOS не удалось запустить вовремя 0x000000008badf00d – задержка в приложенииDidBecomeActive

    Подписать apple-app-site-association

    Xcode 9: документация и инструментальные узлы, которые не отображаются в настройках> Компоненты

    SIGSEGV в фоновом потоке NSRunLoop runMode: beforeDate:

    Физическое тело для SKLabelNode в SpriteKit?

    Являются ли устройства IOS UDID чувствительными к регистру?

    UIWebView loadRequest: постоянно сбой в NSURLErrorTimedout в iOS 6

    Как заставить didReceiveMemoryWarning вызываться под ARC-приложением

    Как сделать кнопку на ячейке просмотра таблицы, вызовите правильную таблицуView: cellForRowAtIndexPath?

    Случай Enum «…» не является членом типа «…»

    Контейнер просмотра с одним и тем же контроллером размера

    Возможно ли сохранить блок внутри объекта NSManagedObject?

    сохраняет в NSDocumentDirectory все в порядке?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.