未传递的值在目标视图控制器中显示为(null)

时间:2014-04-04 16:15:27

标签: ios parameter-passing segue

我现在已经搞乱了两个小时了,所以我觉得是时候问了,我之前已经多次在两次观看之间传递了数据,但这是我第一次和&# #39;曾经遇到过问题。

继承我的源视图代码:

-(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);   
    }
}

当我在此处记录它时,它具有适当的值。

继承我目的地VC的.h

#import <UIKit/UIKit.h>

@interface TRDiscussionDetailsViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@property (strong, nonatomic) NSString *discussionID;


@end

当我在viewDidLoad中记录discussionID值时:它出现了null。

3 个答案:

答案 0 :(得分:3)

如果TRDiscussionDetailsViewController是您的目标视图控制器,则需要使其远离segue而不是重新实例化它。我认为你应该这样做:

-(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);



    }
}

希望有所帮助

答案 1 :(得分:2)

替换:

  

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

使用:

  

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

因为在您的代码中,您创建了一个新的TRDiscussionDetailsViewController,但这不是在执行segue时创建的内容。

答案 2 :(得分:1)

你可以试试这个

-(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);



}
}