【问题标题】:Filter childs not parents of relationship Coredata过滤孩子不是关系Coredata的父母
【发布时间】:2015-02-23 19:27:01
【问题描述】:

我正在尝试过滤 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。 我正在寻找,但什么也没找到。

【问题讨论】:

    标签: ios objective-c core-data nspredicate


    【解决方案1】:

    您的谓词虽然过于复杂,但正在发挥作用。您正在正确选择 Volumen 实体。找到的实例当然仍然有所有可用的关系,所以你有两个选择:

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

    我认为第二个选项是你想要的。

    【讨论】:

    • 谢谢 Mundi,我正在尝试过滤关系,但总是遇到同样的错误,我不知道会发生什么。我要编辑我的帖子给你看。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多