0

UISearchDisplayControllerの両側にを実装しましたMasterViewController。詳細ビューでは、MasterView から選択された最初のアイテムで正常に動作します。

ただし、別の詳細項目を選択する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];
        }
    }

詳細と検索結果の両方のテーブル ビューには、同じ名前のプロトタイプ セルがあります。

UISearchViewControllerここで私が間違っていることと、詳細項目を切り替えるたびに適切にリセットする方法を誰かに教えてもらえますか?

4

1 に答える 1

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に移動したところ、いつでも機能するようになりましたdidSelectRow...

この回答は、同様の問題に苦しんでいる他の人を助けることができると思いました。

于 2013-09-15T09:41:46.693 に答える