Главное, что вам не хватает - это значение, передаваемое между представлениями. Вы не используете какой-либо объект в любом представлении, которое передает значение другому представлению. Например, если вы хотите передать текст из FirstViewController в SecondViewController. Вы можете сделать это следующим образом.
NSString *textToPass = self.firstField.text;
В вашем SecondViewController должен присутствовать строковый объект, скажем, с кодами «паст. Когда вы создаете объект secondViewController в firstViewController, выполните следующие действия:
SecondViewController *controllerSecond = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
controllerSecond.passedText = textToPass;
[self.navigationController pushViewController:controllerSecond animated:YES];
Теперь Везде, где вы хотите показать текст первого экрана, просто используйте строку «пройденный текст».
Надеюсь, это поможет.
:)
===============================================
В своем коде вы можете попробовать следующую модификацию:
NSString *selectedRow = [tableData objectAtIndex:indexPath.row];
controller = (FirstViewController *)[self.navigationController topViewController];
controller.selectedRow = selectedRow;
[self.navigationController popViewControllerAnimated:YES];
Это решит вашу проблему наверняка.