2013-08-29 2 views
1

filterContentForSearchText를 사용하여 표보기를 검색합니다. 검색 기능은 훌륭하지만 행을 선택할 때 해당 행의 ID를 대상보기 컨트롤러에 보내야합니다. 검색을 수행 할 때 검색 전 행의 ID가 여전히 전송됩니다. 나는 그 문제가 정확히 무엇인지 이해하지만 그것을 고치는 법을 알 수 없다.filterContentForSearchText를 사용할 때 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; 
    } 
} 

나는 DVC에 전달할 수 있도록 검색 결과에 ID를 추가하는 쉬운 방법이 있나요 : 이것은 내가 지금까지 가지고 무엇인가?

답변

0

searchResults에는 "full information"이 아닌 각 개체에 대해 "clientName"만 포함되어 있습니다. 나는 searchResultsprojectArray의 "부분 배열"하기 위해 제안 :

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

그런 다음 사용자가 액세스 할 수 있습니다 중 하나 projectArray 또는 searchResultsprepareForSegue에서 : 물론이에 cellForRowAtIndexPath을 조정도해야

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; 
} 

(변경.)

+0

굉장, 고마워. 그 일을 할 수있는 방법이 있다는 것을 알았습니다. 어떻게 확신 할 수 없었습니다. – Keith