gpt4 book ai didi

ios - NSComparisonResult 选项

转载 作者:行者123 更新时间:2023-11-29 10:51:41 25 4
gpt4 key购买 nike

在我的 iOS 应用程序中,我实现了一个来自核心数据的表格 View 和一个搜索栏。在当前状态下,搜索只显示以搜索字符串开头的字段,但我想要的是显示包含至少三个字符长度的搜索文本的字段。

这是我的搜索功能代码:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 
{
NSLog(@"Previous Search Results were removed.");
[self.searchResults removeAllObjects];

for (Person *person in [self.fetchedResultsController fetchedObjects])
{
if ([scope isEqualToString:@"All"] || [person.firstname isEqualToString:scope])
{
NSComparisonResult result = [person.firstname compare:searchText
options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)
range:NSMakeRange(0, [searchText length])];
if (result == NSOrderedSame)
{
NSLog(@"Adding person.firstname '%@' to searchResults as it begins with search text '%@'", person.firstname, searchText);
[self.searchResults addObject:person];
}
}
}
}

恳请您教我如何根据需要进行搜索,任何字段的搜索字符串长度至少为三个字符。谢谢。

最佳答案

在我看来,最适合您要求的最简单方法是使用 NSPredicate 过滤出 [self.fetchedResultsController fetchedObjects] 数组并使用它。 NSPredicate 可以应用于任何 NSArray 以过滤掉其发送 filteredArrayUsingPredicate: 消息到该数组实例的结果。所以我的建议是使用如下代码:

-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope {
self.searchResults = [[self.fetchedResultsController fetchedObjects] filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
Person* person = evaluatedObject;
NSString* firstName = person.firstname;

//searchText having length < 3 should not be considered
if (!!searchText && [searchText length] < 3) {
return YES;
}

if ([scope isEqualToString:@"All"] || [firstName isEqualToString:scope]) {
return ([firstName rangeOfString:searchText].location != NSNotFound);
}
return NO; //if nothing matches
}]];
}

关于ios - NSComparisonResult 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20153095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com