gpt4 book ai didi

objective-c - 在 NSString 搜索栏中不断搜索子字符串

转载 作者:行者123 更新时间:2023-11-29 04:41:48 24 4
gpt4 key购买 nike

我有一个包含多个 NSString 元素的数组,还有一个 View ,其中有一个搜索栏。我想开始搜索用户在搜索字段中写入的内容作为每个 NSString 元素的子字符串。如果 NSString 元素包含子字符串,我想将其添加到新数组中。我尝试用代码来做到这一点,它工作正常,但它不断添加对象,即使它已经为它们添加了对象,所以有人知道为什么吗?我已经将委托(delegate)设置为 self。

//.h @接口(interface)类1

@property(strong, nonatomic) NSMutableArray *allExercisesNames;
@property (weak, nonatomic) IBOutlet UISearchBar *searchBar;
@property(strong, nonatomic) NSMutableArray *foo;

@end

//.m

@implementation class1

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
for(int i = 0; i < _allExercisesNames.count;i++)
{
if([[_allExercisesNames objectAtIndex:i] rangeOfString:searchBar.text].location != NSNotFound)
{
if(_foo == nil)
{
_foo = [[NSMutableArray alloc]initWithObjects:[_allExercisesNames objectAtIndex:i], nil];
[self.gridView reloadData];

}
else
{
[_foo addObject:[_allExercisesNames objectAtIndex:i]];
[self.gridView reloadData];
}
}

}

if([searchBar.text isEqualToString:@""] || searchBar.text==nil)
//![_allExercisesNames containsObject:searchBar.text
{
_foo = nil;
[self.gridView reloadData];
}
}

最佳答案

您没有在函数顶部将“nil”分配给 _foo,因此每次您键入内容时,它都会继续添加到旧的 _foo 数组中。

相反,您应该将 _foo 设置为函数顶部的一个新数组,以便在扫描 _allExercisesNames 数组之前将其清除。

这是一个固定的简化版本,它还使用“for (x in y)”来使其更加简洁。

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if([searchBar.text isEqualToString:@""] || searchBar.text==nil)
_foo = nil;
else
{
_foo = [NSMutableArray new];
for(NSString *exercise in _allExercisesNames)
if([exercise rangeOfString:searchBar.text].location != NSNotFound)
[_foo addObject:exercise];
}

[self.gridView reloadData];
}

关于objective-c - 在 NSString 搜索栏中不断搜索子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10270148/

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