正如标题所说,在我的代码中,当我在我的应用中搜索时,会以一种简单的方式发生这种情况:
stations = [barcelona, madrid, valencia, badajoz]
当我输入“ba”时,它会显示:
mysearch = [barcelona, badajoz]
我想选择badajoz,所以程序返回该行是位置1,而在站中是位置编号3。
有什么想法吗?
PD:与搜索相关的代码
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSPredicate *resultPredicate = [NSPredicate
predicateWithFormat:@"SELF contains[cd] %@",
searchText];
self.searchResults = [self.allItems filteredArrayUsingPredicate:resultPredicate];
}
#pragma mark - UISearchDisplayController delegate methods
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller
shouldReloadTableForSearchString:(NSString *)searchString
{
[self filterContentForSearchText:searchString
scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
objectAtIndex:[self.searchDisplayController.searchBar
selectedScopeButtonIndex]]];
return YES;
}
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller
shouldReloadTableForSearchScope:(NSInteger)searchOption
{
[self filterContentForSearchText:[self.searchDisplayController.searchBar text]
scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
objectAtIndex:searchOption]];
return YES;
}
编辑:我使用下面的答案编辑了我的代码 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 的NSLog(@ “推......”); NSUInteger row = [indexPath row]; //搜索视图前的旧代码
//index from the search
id searchResult = [searchResults objectAtIndex:row];
int indexForResult = [ListaEstaciones indexOfObject:searchResult];
//more stuff
编辑: 现在它适用于这种情况:列表包含所有元素,它搜索得很好,当我开始搜索时效果很好,问题是当停止搜索并选择所有元素列表的一行时,它仍然使用de index之前搜索到的项目列表,这是因为在这段代码中我将搜索布尔变量更改为YES:
- (void)filterContentForSearchText:(NSString*)searchText
scope:(NSString*)scope
{
NSPredicate *resultPredicate = [NSPredicate
predicateWithFormat:@"SELF contains[cd] %@",
searchText];
self.searchResults = [self.allItems filteredArrayUsingPredicate:resultPredicate];
searching = YES;
但是当我返回所有值列表时,我不知道在哪里将搜索值更改为NO。有什么建议?非常感谢。 编辑2:解决了这个网站http://engineeringtheworld.wordpress.com/2011/04/11/detecting-when-clear-is-clicked-in-uisearchbar-x-button/
答案 0 :(得分:1)
如果你有一个对象,你可以在一个数组中找到它的索引。在顶部使用您的示例:
id searchResult = [mysearch objectAtIndex:1];
int indexForResult = [stations indexOfObject:searchResult];
如果你没有进行搜索,你不会想要处理这两个语句,因为它们没有意义。要阻止它们进行处理,需要将它们放在if语句中,并检查是否进行了搜索。
看了你的错误后,似乎你有一个包含1160个对象的数组,你的代码要求对象2147483647.这显然不存在,所以代码崩溃了。为什么你会得到这个错误我不完全确定,只有你能真正回答。使用断点和调试器来找出代码出错的地方。