我试图在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;
}
我总是得到这个错误,在左手边,对于一个所有的操作符,或者任何一个操作符,都必须是NSArray或者NSSet。
发布于 2014-12-26 16:03:43
您的谓词虽然过于复杂,但仍然有效。您正在获得正确的Volumen
实体选择。当然,找到的实例仍然有所有可用的关系,因此您有两个选择:
filteredSetUsingPredicate:
,MusicScore
实体,而不是Volumen
实体。我认为第二个选择是你想要的。
https://stackoverflow.com/questions/27657885
复制相似问题