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 に答える