2012-05-31 35 views
6

我在的時候狄更斯讓這整個核心數據,故事情節,三人的UISearchBar它應該一起工作。在最終成功構建了Core Data的表格之後,使用搜索文本縮小了這些項目,並修改了prepareForSegue,但仍然存在一個打嗝...麻煩路過indexPath.row與prepareForSegue用的UISearchBar

當我單擊表中的任何項目以轉到詳細視圖時,在未經過濾的表格中一切正常。 PrepareForSegue被調用,細節看起來很完美。

當我搜索,我的表被過濾(我要去過濾陣列選項現在不是第二NSFetchedResultsController,但不缺乏嘗試!)。

當我在過濾列表中單擊某個項目,prepareForSegue被調用,詳細信息視圖推,但是,它總是從列表中的第一個項目拉動細節!

例如,如果我搜索「c」和名單縮小到「查理」和「曲奇」,當我選擇「查理」我看到「查理」的詳細視圖。當我選擇「餅乾」時,不幸的是,我也看到「查理」的詳細視圖

我假設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; 

任何幫助,將不勝感激!

+0

當您選擇 「曲奇」,你能登錄的在你獲得角色的時候'self.searchResults'和'indexPath.row'的值是多少? –

+0

當我加入:if(savedSearchTerm){self.selectedRole = {self.searchResults objectAtIndex:indexPath.row]; NSLog(@「什麼是searchresults:%@什麼是indexpath:%@」,self.searchResults,indexPath.row); --------------------我得到以下內容:什麼是searchresults:charlie,cookie [編輯以縮短]什麼是indexpath:(null)-----我'認爲index.path(null)可能是問題? –

+0

和非搜索表,如果我登錄indexPath我得到:什麼是indexpath: 2名的索引[0,3] –

回答

12

感謝菲利普·米爾斯,尋找答案:

只是單純不得不補充:

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; 
+0

不要忘記你可以接受你自己的答案。 –

+0

謝謝!它不會讓我再等17個小時...... :) –