2014-11-21 56 views
0

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

在这方面的任何帮助将有所帮助。

+0

我从这篇文章尝试suggetions。因为我是新来的iOS没有得到它的工作 http://stackoverflow.com/questions/12665001/nspredicate-and-coredata/12672462#12672462 – user3603574 2014-11-21 13:55:33

+0

嗯,我会研究'UITextField'或'UISearchBar的委托方法“你曾经使用过哪一个,并从最后一个逗号中得到字符串,并从中作出谓词? 'NSPredicate * predicate = [NSPredicate predicateWithFormat:@“attributeName =%@”,searchString]; '检查[此链接](http://stackoverflow.com/a/14109042/1474817) – emotality 2014-11-21 14:00:07

回答

1

一个选项是NSManagedObject的子类,并提供(只读)属性,该属性将所讨论的属性的内容作为数组而不是逗号分隔的列表返回。 NSString有一个-componentsSeparatedByString:方法可以很容易地创建这样一个数组。

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

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

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

1

虽然赞同,你会过得更好它们存储在CoreData之前剥离这些字符串成其组成部分的普遍看法,下面要达到你想要什么,假设有问题的属性是name和字符串用户搜索对于是textToFind: - 轻微,如果有一个空间修改

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

如果搜索文本的开始或之后立即“”这将匹配。

+0

谢谢为我工作 – kb920 2015-04-07 09:00:35