我有一个核心数据对象Contact
Contact
=======
fullName
我正在使用NSFetchedResultsController
来显示联系人列表。
我现在想要添加行为如下的搜索选项:
如果用户搜索字符串“ da ”,则结果应为:
亚伦大卫
伯特丹尼尔斯
达纳
约翰大卫
所以搜索结果是按字母顺序排序的字符串,其中字以“ da ”开头
我记得看过一个WWDC会话,展示如何创建一个Word对象并独立存储每个单词,但我试图避免这种方法。
所以我的问题是,我可以用我当前的模型结构和一些谓词魔法进行搜索,或者我必须将fullName存储为单独的单词吗?
答案 0 :(得分:0)
这就是我的所作所为:
NSMutableArray *predicateArray = [NSMutableArray array];
if(searchString.length)
{
for (NSString* searchStringPart in [searchString componentsSeparatedByString:@" "])
{
if([searchStringPart length] > 0)
{
[predicateArray addObject:[NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@", searchStringPart]];
}
}
filterPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[filterPredicate, [NSCompoundPredicate andPredicateWithSubpredicates:predicateArray]]];
}
分类:
NSSortDescriptor *sort = [[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES] autorelease];
NSArray* sortDescriptors = @[sort];
....
[fetchRequest setSortDescriptors:sortDescriptors];
答案 1 :(得分:0)
您需要在数组中按名称对谓词进行过滤。使用以下: -
//Assuming you have store the name in one array
NSArray *names=@[@"Aaron David",@"Bert Daniels",@"Dana",@"John David"];
//Now use contains in predicate for filtered words
//On the basis of search string it will filtered accordingly. lets Say yourStringValue=@"on"
NSPredicate *pd=[NSPredicate predicateWithFormat:@"self CONTAINS[CD] %@",yourStringValue];
NSArray *ar=[names filteredArrayUsingPredicate:pd];
NSLog(@"%@",ar);
输出: -
"Aaron David"