gpt4 book ai didi

ios - 为什么 UISearchBar tableview 索引路径总是返回 objectAtIndex :0

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:06:59 24 4
gpt4 key购买 nike

我有一个 tableview,它加载了一个名为 self.annotationToSort 的数组,并使用 UISearchBar 在 tableview 中搜索对象并更新结果。如果选择了 TableView 中的项目,则会显示包含相应索引路径信息的详细 View 。

我遇到的问题是,当使用搜索栏时,我得到了搜索中的 2 个结果项,单元格中的值显示正确,但随后我单击结果 B,我将对象 A 传递给细节 View Controller 。如果我点击 A,我也会得到 A。

相关代码如下:

#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if ([self.annotationsToSort count] == 0) {
return 1;
} else if (tableView == self.searchDisplayController.searchResultsTableView) {
return [filteredResultsArray count];
} else {
return [self.annotationsToSort count];
}
}

#pragma mark Content Filtering
-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope {
[self.filteredResultsArray removeAllObjects];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SELF.name contains[c] %@) OR (SELF.ciudad contains[c] %@)", searchText,searchText];
[self.filteredResultsArray = [NSMutableArray arrayWithArray:[self.annotationsToSort filteredArrayUsingPredicate:predicate]] retain];
}

#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]]];
tableType = @"FILTER";
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)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
NSLog(@"indexpath selected %@", indexPath);

//Check if using normal or search array
if ([tableType isEqualToString:@"FILTER"]) {
MyLocation *sendingLocation = [self.filteredResultsArray objectAtIndex:indexPath.row];
DetailViewController *destinationViewController = segue.destinationViewController;
destinationViewController.receivedLocation = sendingLocation;
NSLog(@"indexpath selected filter %@", indexPath);
} else {
MyLocation *sendingLocation = [self.annotationsToSort objectAtIndex:indexPath.row];
DetailViewController *destinationViewController = segue.destinationViewController;
destinationViewController.receivedLocation = sendingLocation;
NSLog(@"indexpath selected regular %@", indexPath);
}
}

当过滤 TableView 时,我可以看到索引路径被记录为空。它总是返回 objectAtIndex:0。

最佳答案

你不应该做 NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];,因为有时你会询问错误的 TableView ,它会返回 nil(当访问时行号为零的结果)。

相反,检查您是否被过滤并为索引询问适当的 TableView 。

关于ios - 为什么 UISearchBar tableview 索引路径总是返回 objectAtIndex :0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21296572/

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