我有一个简单的核心数据模型,具有两个字符串属性(大小和类别)。给定一个像“小部件”这样的搜索字符串,是否可以返回与所有查询词匹配的至少一个属性的记录(即所有具有“小”尺寸和“小部件”类别的记录)?我目前有:
NSString *search = @"small widget"
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"size contains[cd] %@ OR category contains[cd] %@", search, search];
...
这不会返回任何结果(因为没有类别或大小等于“小部件”)。有什么建议么?请注意,搜索字符串将由用户从文本字段输入,并且可能以任何顺序出现,因此我无法手动拆分。
最佳答案
我还没有测试过,但看起来你想要这个:
NSString *search = @"small widget";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ contains[cd] size AND %@ contains[cd] category", search, search];
搜索字符串将包含(或不包含)尺寸和类别,您应该询问搜索字符串中是否包含当前尺寸或类别。
您还可以拆分搜索字符串并修改谓词。您应该从它们中找出表现更好的一个
NSString *search = @"small widget";
NSArray *array = [search componentsSeparatedByString:@" "];
NSMutableArray *subPredicates = [NSMutableArray array];
for (NSString *q in array) {
[subPredicates addObject:
[NSPredicate predicateWithFormat:@"size contains[cd] %@ OR category contains[cd] %@", q, q]];
}
NSCompoundPredicate *predicate = [[[NSCompoundPredicate alloc] initWithType:NSAndPredicateType
subpredicates:subPredicates] autorelease];
关于iphone - 使用单个搜索字符串核心数据查询多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5036976/