У меня есть UITableViewController с segue, где я пытаюсь получить текущую выбранную строку:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([[segue identifier] isEqualToString:@"EditFilterElementSegue"]){
// Get the element that was clicked and pass it to the view controller for display
NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
Element *element = [fetchedResultsController objectAtIndexPath:selectedIndexPath];
FilterElementTableViewController *vc = segue.destinationViewController;
vc.filter = filter;
vc.element = element;
}
}
Проблема заключается в том, что indexPathForSelectedRow возвращает nil. Документы говорят, что nil возвращается "если указательный путь недействителен". Если я добавлю:
[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:YES scrollPosition:0];
selectedIndexPath = [self.tableView indexPathForSelectedRow];
selectedIndexPath действителен. Итак, я в настоящее время предполагаю, что строка как-то становится невыбранной. Может ли кто-нибудь сказать мне, как выяснить, если это так и что может быть причиной?
Этот код работал нормально, пока я не переработал NSFetchedResultsController (который в противном случае работает). Я также использую indexPathForSelectedRow в нескольких других контроллерах табличных представлений, где он отлично работает (один из которых также использует NSFetchedResultsController).
Я также пытался взломать didSelectRowAtIndexPath, но то же самое происходит там. (ожидается, поскольку он вызвал после prepareForSegue.)