Ios 搜索栏代理
这是我的密码:Ios 搜索栏代理,ios,objective-c,iphone,delegates,uisearchbardelegate,Ios,Objective C,Iphone,Delegates,Uisearchbardelegate,这是我的密码: - (void)searchTextDidChange:(TaggingSearchBar *)searchBar text:(NSString *)searchText { NSArray *allPlayers = self.sessionModel.taggingModel.PlayersFromDatabase; [self.filterdPlayers removeAllObjects]; if
- (void)searchTextDidChange:(TaggingSearchBar *)searchBar
text:(NSString *)searchText {
NSArray *allPlayers = self.sessionModel.taggingModel.PlayersFromDatabase;
[self.filterdPlayers removeAllObjects];
if (searchText.length > 0) {
self.isFilterd = YES;
for (Player *p in allPlayers) {
NSString *playerDescription = [NSString stringWithFormat:@"%d %@", p.jerseyNumber.intValue, p.fullName];
if ([playerDescription rangeOfString:searchText].location != NSNotFound) {
[self.filterdPlayers addObject:playerDescription];
}
}
}
else {
self.filterdPlayers = [allPlayers mutableCopy];
self.isFilterd = NO ;
}
}
有点不对劲,因为当我调试时,我在self.filtedplayers中输入C(我有一个叫Cat的人),结果是零。调试器显示帽子放在这个地方,如果一切正常,但什么也没发生。这是什么原因造成的?
我尝试了containsstring+addObject:p代码在功能上看起来不错。为了安全起见,我将内部
if
子句更改为:
if (searchText && [playerDescription rangeOfString:searchText].length) {
这更安全,因为如果searchText
为零,代码将崩溃。我知道你以前验证过,但这是最好的做法
此外,我认为您的问题是由于添加了string对象,而不是Player
对象。当搜索词为空/nil时,添加Player
对象:
self.filterdPlayers = [allPlayers mutableCopy];
但当搜索词存在时,您将添加字符串playerDescription
,而不是Player
对象:
[self.filterdPlayers addObject:p];
代码在功能上看起来不错。为了安全起见,我将内部
if
子句更改为:
if (searchText && [playerDescription rangeOfString:searchText].length) {
这更安全,因为如果searchText
为零,代码将崩溃。我知道你以前验证过,但这是最好的做法
此外,我认为您的问题是由于添加了string对象,而不是Player
对象。当搜索词为空/nil时,添加Player
对象:
self.filterdPlayers = [allPlayers mutableCopy];
但当搜索词存在时,您将添加字符串playerDescription
,而不是Player
对象:
[self.filterdPlayers addObject:p];
使用这个
NSString *search_str = [NSString stringWithFormat:@"%@%@",searchBar.text, searchText];
if ( playerDescription.containsString(searchBar.text)) //instead of if ([playerDescription rangeOfString:searchText].location != NSNotFound)
使用这个
NSString *search_str = [NSString stringWithFormat:@"%@%@",searchBar.text, searchText];
if ( playerDescription.containsString(searchBar.text)) //instead of if ([playerDescription rangeOfString:searchText].location != NSNotFound)
您确定在某个时候
playerDescription
确实包含字符串Cat
?是的,我确定。我的字符串是C或CA,playerDescription包含0个Tommy Cat。(0是球衣号码)您确定在某个时候playerDescription
确实包含字符串Cat
?是的,我确定。我的字符串是C或CA,playerDescription包含0个Tommy Cat。(0是一个球衣号码)我也尝试添加玩家对象,但它也不起作用。当您调试代码时,它是否达到以下行:[self.filterdPlayers addObject:playerddescription]代码>?是的,什么也没发生也许有人在事后触摸了self.FilterPlayer
?在实例变量上放置一个断点,然后查看它在该函数完成后是否会更改。另外,请记住,用户每次在搜索栏中键入内容时都会调用您的函数,因此,如果他们键入C,然后键入CA,则会调用两次。我也尝试添加了Player对象,但它也不起作用。当您调试代码时,它曾经到达过这一行:[self.filterdPlayers addObject:playerddescription]代码>?是的,什么也没发生也许有人在事后触摸了self.FilterPlayer
?在实例变量上放置断点,查看此函数完成后是否会更改。此外,请记住,每次用户在搜索栏中键入内容时都会调用您的函数,因此如果他们键入C,然后键入CA,则会调用两次。小心使用containssString
,如果此应用程序在iOS 7上运行,则会崩溃(此函数是在iOS 8上引入的)。使用此NSRange nameRange=[playerDescription rangeOfString:search_str options:NSCaseInsensitiveSearch];if(nameRange.location!=NSNotFound)好的,我知道了。Xcode没有在安装功能中使用我的数组alloc init。小心使用containssString
,如果此应用程序在iOS 7上运行,它将崩溃(此函数是在iOS 8上引入的)。使用此NSRange namerage=[playerDescription rangeOfString:search\u str options:NSCaseInsensitiveSearch];如果(nameRange.location!=NSNotFound)好的,我知道了。Xcode没有在安装程序中使用我的数组alloc init。