如何创建一个NSPredicate来查找具有前导数字值的条目?

3
我正在使用NSPredicates根据名称属性获取实体。创建一个以字母开头的名称谓词很容易(@"name BEGINSWITH %@", searchLetter),但现在我想获取所有以数字值或非字母字符开头的名称实体。
这里应该使用什么样的谓词表达式呢?
目前,我不想深入研究谓词编程,因为这是我现在所需要的全部内容,时间过得飞快。所以,请不要指向Predicate Programming Guide,我只需要那个表达式.. :)
非常感谢!
2个回答

5
如果使用MATCHES运算符与获取请求不起作用,则必须手动处理:
NOT(name BEGINSWITH[cd] 'a' OR name BEGINSWITH[cd] 'b' OR ... OR name BEGINSWITH[cd] 'z')

这将获取所有不以字母开头的内容。同样地:

name BEGINSWITH[cd] '0' OR name BEGINSWITH[cd] '1' OR ... OR name BEGINSWITH[cd] '9'

将以数字开头的所有内容都获取。

编辑评论提示了另一个想法:

如果您可以提取name的第一个字母,您可以这样做:

NOT(name[0] IN %@), arrayOfLetters

(name[0]代表name的第一个字符,arrayOfLetters是一个包含字母字符的NSArray)

1
我没有尝试过,但是把一个字母数组扔给它似乎是可能的,因为谓词处理器在其他地方处理它们非常出色。 predicate ="NOT(name BEGINSWITH[cd] %@)", arrayOfLetters; 这样做会更美观,而且很可能解析速度更快。当然,只要它能正常工作。 :) - Matthew Frederick

1

您可以使用'MATCHES'比较任何正则表达式(例如^[0-9])。但据我所知,在处理Core Data时,这种方法不起作用。

另一个解决方案是使用新的(OS X 10.6,iOS 4.0)predicateWithBlock:并使用字符串方法自己检查条件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接