1

我正在使用 filterContentForSearchText 来搜索表格视图。搜索效果很好,但是当我选择一行时,我让它将该行的 ID 发送到我的目标视图控制器。当我进行搜索时,它仍然会发送我搜索之前该行的 ID。我完全理解问题所在,但我不知道如何解决它。这是我到目前为止所拥有的:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[cd] %@", searchText];

    searchResults = [[projectArray valueForKey:@"clientName"] filteredArrayUsingPredicate:resultPredicate];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"CategorySegue"]) {
    TimeCategoryViewController *dvc = [segue destinationViewController];

    if ([self.searchDisplayController isActive]) {
        NSIndexPath *path = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow];
        NSNumber *pid = [[projectArray objectAtIndex:path.row] valueForKey:@"pid"];


        dvc.selectedProject = [searchResults objectAtIndex:pid];
    } else {
        NSIndexPath *path = [self.tableView indexPathForSelectedRow];
        NSNumber *pid = [[projectArray objectAtIndex:path.row] valueForKey:@"pid"];
        dvc.selectedProject = pid;
    }
}

有没有一种简单的方法可以将 ID 添加到搜索结果中,以便我可以将其传递给 dvc?

4

1 回答 1

0

问题是searchResults它只包含每个对象的“clientName”而不是“完整信息”。我建议制作searchResults一个“子数组” projectArray

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"clientName CONTAINS[cd] %@", searchText];
    searchResults = [projectArray filteredArrayUsingPredicate:resultPredicate];
}

然后您可以访问projectArraysearchResults访问prepareForSegue

if ([self.searchDisplayController isActive]) {
    NSIndexPath *path = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow];
    NSNumber *pid = [[searchResults objectAtIndex:path.row] objectForKey:@"pid"];
    dvc.selectedProject = pid;
} else {
    NSIndexPath *path = [self.tableView indexPathForSelectedRow];
    NSNumber *pid = [[projectArray objectAtIndex:path.row] objectForKey:@"pid"];
    dvc.selectedProject = pid;
}

(当然你也必须适应cellForRowAtIndexPath这种变化。)

于 2013-08-29T20:30:22.007 回答