我正在尝试过滤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。我找到了,但我什么都没发现。
答案 0 :(得分:1)
你的谓词虽然过于复杂,却在起作用。您正在获得Volumen
个实体的正确选择。当然,找到的实例仍然具有所有可用的关系,因此您有两种选择:
filteredSetUsingPredicate:
,MusicScore
个实体,而不是Volumen
个实体。我认为第二种选择就是你想要的。