【发布时间】: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