2012-05-31 2 views
6

У меня есть время от времени получать все данные Core Data, Storyboard, трио UISearchBar, работая вместе как следует. Наконец, успешно построив таблицу с помощью Core Data, сузите элементы с текстом поиска и изменив готовый файл, есть еще одна икота ...Устранение неполадок indexPath.row with prepareForSegue с UISearchBar

Когда я нажимаю на любой элемент таблицы, чтобы перейти к подробному представлению, все хорошо в нефильтрованной таблице. Вызывается PrepareForSegue, и детали отображаются отлично.

Когда я выполняю поиск, моя таблица отфильтрована (теперь я буду фильтровать массив, а не второй NSFetchedResultsController, но не из-за отсутствия попыток!).

Когда я нажимаю на элемент в отфильтрованном списке, вызывается метод prepareForSegue и отображается подробный вид, однако он всегда извлекает детали из первого элемента в списке!

Например, если я искал «c», и список был сужен до «Charlie» и «Cookie», когда я выбираю «Charlie», я вижу подробный вид для «Charlie». Когда я выбираю «Cookie», я, к сожалению, также вижу подробный вид для «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; 

Любая помощь будет оценена!

+0

При выборе "Cookie", вы можете регистрируем значения 'self.searchResults' и' indexPath.row' в точке, где вы получаете роль? –

+0

Когда я добавляю: if (savedSearchTerm) { self.selectedRole = [self.searchResults objectAtIndex: indexPath.row]; NSLog (@ "какие поисковые результаты:% @ что такое индексный путь:% @", self.searchResults, indexPath.row); -------------------- Я получаю следующее: какие поисковые запросы: charlie, cookie [отредактировано для сокращения], что такое индексный путь: (null) ----- I Думаю, что проблема index.path (null)? –

+0

и в таблице без поиска, если я регистрирую 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 часов ... :) –

Смежные вопросы