6

このコアデータ、ストーリーボード、UISearchBarトリオ全体を正常に連携させるのに時間がかかっています。最終的にCoreDataを使用してテーブルを正常に作成し、検索テキストを使用して項目を絞り込み、prepareForSegueを変更しましたが、まだ1つの問題があります...

テーブル内の任意のアイテムをクリックして詳細ビューに移動すると、フィルタリングされていないテーブルではすべて問題ありません。PrepareForSegueが呼び出され、詳細が完全に表示されます。

検索すると、テーブルがフィルター処理されます(2番目のNSFetchedResultsControllerの代わりに、フィルター処理された配列オプションを使用しますが、試行不足のためではありません!)。

フィルタされたリストのアイテムをクリックすると、prepareForSegueが呼び出され、詳細ビューがプッシュされますが、常にリストの最初のアイテムから詳細が取得されます。

たとえば、「c」を検索してリストを「Charlie」と「Cookie」に絞り込んだ場合、「Charlie」を選択すると「Charlie」の詳細ビューが表示されます。「クッキー」を選択すると、残念ながら「チャーリー」の詳細ビューも表示されます

私はprepareForSegueコードが問題であると仮定しています(おそらく間違っていますか?)。コードは次のとおりです。

    SampleTVC *sampleDetailTVC = segue.destinationViewController;
    sampleDetailTVC.delegate = self;

    // Store selected Role in selectedRole property
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
  //  self.selectedRole = [self.fetchedResultsController objectAtIndexPath:indexPath];
    if (savedSearchTerm){
        self.selectedRole = [self.searchResults objectAtIndex:indexPath.row];
    } else {
        self.selectedRole = [self.fetchedResultsController objectAtIndexPath:indexPath];
    }
    NSLog(@"Passing selected role (%@) to SampleTVC", self.selectedRole.name);
    sampleDetailTVC.role = self.selectedRole;

どんな助けでもいただければ幸いです!

4

1 に答える 1

12

答えてくれたPhillipMillsに感謝します。

単に追加する必要がありました:

    indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow];

完全なサンプル:

    SampleTVC *sampleDetailTVC = segue.destinationViewController;
    sampleDetailTVC.delegate = self;
     // Store selected Role in selectedRole property
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    //  self.selectedRole = [self.fetchedResultsController objectAtIndexPath:indexPath];
    if (savedSearchTerm){
         indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow];
    self.selectedRole = [self.searchResults objectAtIndex:indexPath.row];
    } else {
        self.selectedRole = [self.fetchedResultsController objectAtIndexPath:indexPath];
     }
    NSLog(@"Passing selected role (%@) to SampleTVC", self.selectedRole.name);
    sampleDetailTVC.role = self.selectedRole;
于 2012-05-31T21:28:58.437 に答える