【问题标题】:NSPredicate to find all objects whose title key starts with a vowelNSPredicate 查找标题键以元音开头的所有对象
【发布时间】:2015-05-05 18:10:14
【问题描述】:
我有一组具有title 属性(NSString)的对象。我想检索所有title 以元音开头的对象。我想我可以为每个字母使用NSPredicate 并将它们与NSCompoundPredicate 结合起来,但我正在寻找更优雅的东西。
有没有办法将BEGINSWITH[cd] 与IN 组合并传递一个元音NSSet?
还有更好的选择吗?
创建一堆谓词然后将它们组合起来看起来既麻烦又丑陋。
【问题讨论】:
标签:
objective-c
core-data
nspredicate
【解决方案1】:
您不需要使用公认的冗长NSCompoundPredicate。我认为只写一个长格式字符串是最实用的。
[NSPredicate predicateWithFormat:
@"title beginswith[cd] 'a' OR "
@"title beginswith[cd] 'e' OR "
@"title beginswith[cd] 'i' OR "
@"title beginswith[cd] 'o' OR "
@"title beginswith[cd] 'u'", title];
复制粘贴花了我大约 30 秒。
但是,我认为这不会很好。也许您想考虑通过添加布尔属性startsWithVowel 并在title 的设置器中更新它来创建派生属性。
-(void)setTitle:(NSString)value {
[self willChangeValueForKey:@"title"];
[self setPrimitiveTitle:value];
[self didChangeValueForKey:@"title"];
BOOL result = // your vowel logic
self.startsWithVowel = @(result);
}
【解决方案2】:
您也可以使用带有正则表达式的谓词:
[NSPredicate predicateWithFormat:@"title MATCHES[c] %@", @"[aeiou].*"]