gpt4 book ai didi

ios - 过滤关系 Coredata 的子项而不是父项

转载 作者:行者123 更新时间:2023-11-29 02:25:06 25 4
gpt4 key购买 nike

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

最佳答案

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

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

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

关于ios - 过滤关系 Coredata 的子项而不是父项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27657885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com