Good Ways to accomplish this:  
- Custom Delegate
- NSNotificationCenter
- NSUserDefaults(edit: unnecessary disk writes)
- Maintaining a Common NSObject Subclass and refreshing data on -willAppear
Other Ways:
- Database (Core Data / SQLite) or plist (all too heavy for your case) (edit: unnecessary disk writes)
- UIPasteBoard
A quick delegate tutorial:
Part 1: Creating the delegate
Suppose this is in the .h of the UITableViewController subclass that I have named YourTableViewControllerClassName
//declare the protocol
@class YourTableViewControllerClassName;
@protocol YourTableViewControllerClassNameDelegate <NSObject>
//@required    //uncomment to specify required delegate methods as below
//- (void)requiredMethodNotUsedForThisExample;
@optional
- (void)selectedRow: (NSString *)selectedObj;
@end
@interface YourTableViewControllerClassName : UITableViewController
//declare a weak property to store any object
@property (nonatomic, weak) id <YourTableViewControllerClassNameDelegate> delegate;
@end
Suppose this is the -didSelectRowAtIndexPath of the corresponding UITableViewController subclass:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    //the following line is the main thing and can be called
    //in any method within this class (placed wisely)
    if([[self delegate] respondsToSelector:@selector(selectedRow)]) { //avoid crash
        [[self delegate] selectedRow:cell.textLabel.text];    
    }
    [self.navigationController popViewControllerAnimated:YES];
}
Part 2: Implementing the delegate
Suppose this is the code somewhere in the former UIViewController subclass:
//call this method somewhere
-(void)pushMyTableViewController
{
    //declare "UILabel lblText;" in the .h of this class
    //lblText = [UILabel alloc] init];
    //[lblText setFrame: CGRectMake(0,0,100,35)];
    //[self.view addSubview:lblText];
    YourTableViewControllerClassName *tvcObj = [[YourTableViewControllerClassName alloc] init];
    //for the following line, remember to declare
    //<YourTableViewControllerClassNameDelegate> in the .h of this class
    //hence declaring that this class conforms to the delegate protocol
    [tvcObj setDelegate:self];
    [self.navigationController pushViewController:tvcObj animated:YES];
}
And this will be the delegate method you could implement in the former UIViewController subclass:
#pragma mark - Optional YourTableViewControllerClassName Delegate Methods
-(void)selectedRow:(NSString *)selectedObj
{
    [lblText setText:selectedObj];
}
NOTE: This will not solve your particular issue because we are only setting a label depending on the selected row from the UITableViewController subclass.
The point was to show how delegation works.
Also, if you can get the cell.textLabel.text and set it on a UILabel in the former class then you can make changes at the appropriate places (mainly the method/s within @protocol)and pass the array index of the selected item instead or any object/variable/whatever that makes your life easier 
*If you want something easier then go for NSNotificationCenter or NSUserDefaults or maybe even UIPasteBoard (if it floats your boat)