Objective-C谓词用于搜索逗号分隔值

时间:2014-11-21 13:49:02

标签: ios core-data nspredicate

我有像abc,and,abn这样的值,它们是NSManagedObject类的字段的逗号分隔值。如果用户搜索abcabdabn,我需要一个与此NSManagedObject匹配的Objective-C谓词。此外,它只应从每个逗号分隔值的开头搜索。

这方面的任何帮助都会有所帮助。

2 个答案:

答案 0 :(得分:1)

一个选项是子类NSManagedObject并提供(readonly)属性,该属性以数组而不是逗号分隔列表的形式返回有问题的属性的内容。 NSString有一个-componentsSeparatedByString:方法,可以轻松创建这样的数组。

另一种选择是创建一个谓词,该谓词接受包含相关属性中搜索字符串的任何对象,然后过滤匹配的对象以清除任何误报。

第三种可能性是确保目标属性始终以逗号作为第一个字符,然后在创建谓词时将逗号添加到搜索字符串中。也就是说,像,abc,and,abn而不是abc,and,abn这样的值,然后搜索,ab而不是ab

那就是说,我认为正确的解决方案是通过将值存储为集合而不是逗号分隔列表来完全避免这种情况。

答案 1 :(得分:1)

虽然支持一般观点,即在将这些字符串存储到CoreData中之前最好将这些字符串剥离到其组成部分,但是假设所讨论的属性为name并且字符串为用户正在搜索textToFind

NSPredicate *predicate = [NSPredicate predicateWithFormat:"name beginswith %@ OR name contains %@", textToFind, [NSString sringWithFormat:",%@", textToFind]];

如果搜索文本位于开头或紧跟在“,”之后,这将匹配 - 如果有空格则稍微修改。