NSPredicate查找标题键以元音开头的所有对象

时间:2015-05-05 18:10:14

标签: objective-c core-data nspredicate

我有一组具有title属性的对象(NSString)。我想要检索title以元音开头的所有对象。我想我可以为每个字母使用NSPredicate并将它们与NSCompoundPredicate结合起来,但我们正在寻找更优雅的东西。

有没有办法将BEGINSWITH[cd]IN合并,并传递NSSet个元音?

有更好的选择吗?

创建一堆谓词然后将它们组合起来似乎很麻烦和丑陋。

2 个答案:

答案 0 :(得分:3)

您无需使用公认的详细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的setter中更新它。

-(void)setTitle:(NSString)value {
    [self willChangeValueForKey:@"title"];
    [self setPrimitiveTitle:value];
    [self didChangeValueForKey:@"title"];

    BOOL result = // your vowel logic
    self.startsWithVowel = @(result);
}

答案 1 :(得分:2)

您还可以使用带正则表达式的谓词:

[NSPredicate predicateWithFormat:@"title MATCHES[c] %@", @"[aeiou].*"]