Настройка 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).

  • Обработка событий между C ++ и Objective C
  • Бесплатный профилирующий профиль с Qt
  • Быстрая двумерная ошибка расширения массива
  • Как получить покрытие кода в Xcode 6?
  • Переопределение предпочтений NSUserDefault во время сборки
  • XCode 8, Swift 3 и iOS 9.3 Base SDK
  • Доступ ко всем изображениям в папке iphone Application
  • dyld: библиотека не загружена для Framework в рамках Framework
  • Xcode - исполняемый файл был подписан с недопустимыми правами только в режиме RELEASE
  • Загруженный Xcode 6.3 из магазина, но 6.2 все еще запущен
  • Я не могу развернуть приложение Apple для тестирования на устройстве
  • Interesting Posts

    Если у сильного свойства есть блок, который ссылается на себя, это цикл сохранения?

    Общий контроллер представления не будет работать с делегатом и расширением

    Обрабатывать только условие else в swift 'if let', используя 'where'

    Получить профиль Facebook pic, используя 3.0 SDK

    «Неуравновешенные вызовы для начала и конца перехода на внешний вид для DetailViewController» при нажатии нескольких контроллеров подробных представлений

    создание класса «thread safe» в iOS

    socket.io – ReferenceError: io не определен

    Swift – Как вызвать Selector () для метода с аргументами?

    Я хочу выпустить CVPixelBufferRef в быстром

    phonegap iframe не отображается в iOS-симуляторе или устройстве

    Приложение вылетает только на iPod Touch 4-го поколения

    Передайте текст с метки iOS на ярлык WatchOS – swift-

    Как запустить активные процессы в iOS

    CCTurnOffTiles изменяет мои CCSprites

    Запрос отмены GMSPlacesClient

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