过滤孩子不是关系Coredata的父母

时间:2014-12-26 13:34:39

标签: ios objective-c core-data nspredicate

我正在尝试过滤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"

当我搜索名为“two”的乐谱时,我想要这个结果:

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。我找到了,但我什么都没发现。

1 个答案:

答案 0 :(得分:1)

你的谓词虽然过于复杂,却在起作用。您正在获得Volumen个实体的正确选择。当然,找到的实例仍然具有所有可用的关系,因此您有两种选择:

  • 您可以再次过滤关系,例如与filteredSetUsingPredicate:
  • 或者您首先获取MusicScore个实体,而不是Volumen个实体。

我认为第二种选择就是你想要的。