I've been messing with this for two hours now so I think it's time to ask, I've passed data between two views plenty of times before, but this is the first time I've ever had a problem with it.

Heres my code for the source view:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    TRTranslation *translation = [discussionsArray objectAtIndex:indexPath.row];
    selectedDiscussionID = translation.discussionID;
    [self performSegueWithIdentifier:@"communityToDetails" sender:self];   
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"communityToDetails"])
    {
        TRDiscussionDetailsViewController *ddvc = [[TRDiscussionDetailsViewController alloc] init];
        ddvc.discussionID = selectedDiscussionID;
        NSLog(@" discussion id %@", ddvc.discussionID);   
    }
}

When I log it here it has the proper value.

Heres the .h of my destination VC

#import <UIKit/UIKit.h>

@interface TRDiscussionDetailsViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@property (strong, nonatomic) NSString *discussionID;


@end

When I log the discussionID value in viewDidLoad: it comes out null.

有帮助吗?

解决方案

If the TRDiscussionDetailsViewController is your destination view controller, you need to keep it from segue instead of re-instantiate it. I think you should do this:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender    
{ 
    if ([segue.identifier isEqualToString:@"communityToDetails"]) {

        TRDiscussionDetailsViewController *ddvc = (TRDiscussionDetailsViewController*)segue.destinationViewController;

        ddvc.discussionID = selectedDiscussionID;
        NSLog(@" discussion id %@", ddvc.discussionID);



    }
}

Hope it helps

其他提示

Replace:

TRDiscussionDetailsViewController *ddvc = [[TRDiscussionDetailsViewController alloc] init];

With:

TRDiscussionDetailsViewController *ddvc = (TRDiscussionDetailsViewController *)[segue destinationController];

Because, in your code, you were creating a new TRDiscussionDetailsViewController, but that's not the on which'll be created when the segue is performed.

You can try this

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{ if ([segue.identifier isEqualToString:@"communityToDetails"]) {

    TRDiscussionDetailsViewController *ddvc = (TRDiscussionDetailsViewController *)[segue destinationViewController];;
    ddvc.discussionID = selectedDiscussionID;
    NSLog(@" discussion id %@", ddvc.discussionID);



}
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top