2013-09-14 3 views
0

Я реализовал UISearchDisplayController по обе стороны от MasterViewController. В подробном представлении он отлично работает с первым элементом, выбранным из MasterView.UISearchDisplayController в DetailView только отображает результаты один раз

Однако, если выбрать другой Detail элемент, поиск не будет отображать любой объект, даже если NSLog говорит мне, что нашел все ожидаемые клетки:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     static NSString *feedTableIdentifier = @"unread"; 
     Post *thepost=nil; 
     if (tableView == self.searchDisplayController.searchResultsTableView) { 
      NSLog(@"in a search"); 
      thepost = [self.filteredFeedArray objectAtIndex:indexPath.row]; 
     } else { 
      NSLog(@"NOT in a search"); 
      thepost = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
     } 
     NSDate *tmpDate=[NSDate date]; 

     if (thepost.read) { 
      tmpDate=thepost.read; 
      feedTableIdentifier = @"read"; 
     } else if (thepost.date) { 
      tmpDate=thepost.date; 
      feedTableIdentifier = @"unread"; 
     } 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:feedTableIdentifier]; 
     if (cell == nil) { 
      cell = [[UITableViewCell alloc] 
        initWithStyle:UITableViewCellStyleDefault 
        reuseIdentifier:feedTableIdentifier]; 
     } 
     ((UILabel *)[cell viewWithTag:1]).text = thepost.title; 
     NSDateFormatter *df=[[NSDateFormatter alloc] init]; 
     df.dateFormat = @"EEEE, MMMM d, YYYY"; 
     ((UILabel *)[cell viewWithTag:2]).text = [df stringFromDate:tmpDate]; 
     ((UILabel *)[cell viewWithTag:3]).text = [self flattenHTML:thepost.excerpt]; 
     return cell; 
    } 

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    { 
     if (tableView == self.searchDisplayController.searchResultsTableView) { 
      NSLog(@"in a search: %d", [_filteredFeedArray count]); 
      return [_filteredFeedArray count]; 
     } else { 
      NSLog(@"NOT in a search: %d", [[[_fetchedResultsController sections] objectAtIndex:section] numberOfObjects]); 
      return [[[_fetchedResultsController sections] objectAtIndex:section] numberOfObjects]; 
     } 
    } 

Оба детали и SearchResult вид Таблица имеют однообразный по имени Прототип клетки.

Может кто-нибудь сказать мне, что я делаю неправильно здесь, и как я мог бы правильно сбросить свой UISearchViewController при переключении деталей?

ответ

0

Нашел:

Это потому, что мой поиск TableView использует прототип клетки. UISearchViewController моего DetailView имел в своем методе viewDidLoad:

[self.detailViewController.searchDisplayController.searchResultsTableView registerNib:[UINib nibWithNibName:@"DetailSearchPrototypeCellRead" bundle:nil] forCellReuseIdentifier:@"read"]; 
    [self.detailViewController.searchDisplayController.searchResultsTableView registerNib:[UINib nibWithNibName:@"DetailSearchPrototypeCellUnRead" bundle:nil] forCellReuseIdentifier:@"unread"]; 

Оказывается, что это работает только в первый раз DetailView заполняется. Я переместил выше в MasterView's didSelectRow..., и теперь он работает каждый раз.

Я думал, что этот ответ может помочь другим, борющимся с подобными вопросами.