Отфильтровать дочерние элементы, не являющиеся родителями отношений Coredata

Я пытаюсь отфильтровать дочерние отношения в coredata, но проблема в том, что Coredata фильтрует по родителю, и это правильно, но не фильтрует дочерние элементы.

Модель:

Volumen <-->> MusicScore

Я хочу отфильтровать строки музыкального ядра по объему.

Мой NSPredicate таков:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(relation_music_score, $musicscore, ANY $musicscore.nameMusicScore CONTAINS[cd] %@).@count > 0", searchStr];

self.collectionVolumen = [BOIVolumen MR_findAllWithPredicate:predicate];

CoreData предоставит мне все тома, которые содержат название найденной музыкальной партитуры, но я хочу, чтобы все объемы с поиском только музыкальной партитуры, а не всей музыкальной партитуры.

Пример:

Volumens
  name = "One",
  etc..
  relation_music_score = NSOrderedSet

     Music Score (1)
       name = "One"

     Music Score (2)
       name = "two"

Volumens
  name = "Two",
  etc..
  relation_music_score = NSOrderedSet

     Music Score (3)
       name = "three"

     Music Score (4)
        name = "four"

Когда я ищу музыку с названием "два", мне нужен такой результат:

Volumens
  name = "One",
  etc..
  relation_music_score = NSOrderedSet

Music Score (2)
  name = "two"

И предыдущий NSPredicate получил меня:

Volumens
  name = "One",
  etc..
  relation_music_score = NSOrderedSet

Music Score (1)
  name = "One"

Music Score (2)
  name = "two"

ИЗМЕНИТЬ:

Я пытаюсь отфильтровать отношения с этим предикатом и кодом:

  for (int i = 0; i < [self.collectionVolumen count]; i++) {
        BOIVolumen *volumen = [self.collectionVolumen objectAtIndex:i];
        NSOrderedSet *musicStore = [[self.collectionVolumen objectAtIndex:i] relation_music_score];

        NSPredicate *filterMusicScore = [NSPredicate predicateWithFormat:@"nameMusicScore CONTAINS[cd] %@", searchStr];
        NSOrderedSet *musicStoreTemporal = [musicStore filteredOrderedSetUsingPredicate:filterMusicScore];

        volumen.relation_music_score = musicStoreTemporal;
    }

и всегда я получаю эту ошибку Левая сторона для оператора ALL или ANY должна быть либо NSArray, либо NSSet. Я нашел, но ничего не нашел.


person joselufo    schedule 26.12.2014    source источник


Ответы (1)


Ваш предикат, хотя и слишком сложный, работает. Вы получаете правильный выбор Volumen сущностей. Найденный экземпляр, конечно, по-прежнему имеет все доступные отношения, поэтому у вас есть два варианта:

  • Вы либо снова фильтруете отношения, например. с filteredSetUsingPredicate:,
  • или вы в первую очередь получаете MusicScore сущности, а не Volumen сущности.

Думаю, второй вариант - это то, что вам нужно.

person Mundi    schedule 26.12.2014
comment
Спасибо, Мунди, я пытаюсь отфильтровать отношения, но всегда получаю одну и ту же ошибку и не знаю, что происходит. Я собираюсь отредактировать свой пост, чтобы показать вам. Еще раз спасибо. - person joselufo; 26.12.2014