在segue之后NSString没有正确传递

时间:2013-04-25 15:33:58

标签: ios segue

我正在使用故事板和条件segue似乎正常工作。但是,当我将字符串传递给新视图控制器时,当我尝试使用NSLog将其打印出来时,它在新视图控制器中显示为null。

VC1:

[self performSegueWithIdentifier: @"userDetailsSegue" sender: self];


    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"userDetailsSegue"])
{
    UIStoryboard *mainStoryboard1 = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    tableView1 * secondView = (tableView1*)[mainStoryboard1 instantiateViewControllerWithIdentifier:@"userDetails"];
    //tableView1 * secondView = [[tableView1 alloc] init];
    [secondView setNetID:userNameTextField.text];
    //NSLog(secondView.netID);
    NSLog(@"Works");
}
}

VC2.h:

#import "ViewController.h"
@interface tableView1 : UITableViewController
{
    NSString *netID;
}

@property (nonatomic, retain) IBOutlet NSString *netID;

@end

VC2.m:

- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"my netID is: %@", netID);
NSLog(@"test:");}

输出:

2013-04-25 10:23:56.576 HwPlusPlus[14240:c07] Works
2013-04-25 10:23:56.579 HwPlusPlus[14240:c07] my netID is: (null)
2013-04-25 10:23:56.580 HwPlusPlus[14240:c07] test:

我试图设置netID = [[NString alloc] init];在VC2中但这也无济于事。知道我做错了什么吗?它拉起第二个视图控制器,只需找到

3 个答案:

答案 0 :(得分:1)

下次请使用大写字母代表VC的第一个字母,并尝试为VCs

选择有意义或唯一的名称

VC1:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([[segue identifier] isEqualToString:@"userDetailsSegue"])
    {
        tableView1 * secondView =segue destinationViewController];
        secondView.netID=userNameTextField.text;
    }
}

VC2.h:

#import "ViewController.h"
@interface tableView1 : UITableViewController
{
    NSString *netID;
}

@property (nonatomic, strong)NSString *netID;

@end

VC2.m:

@implementation tableView1
@synthesize netID;
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"my netID is: %@", self.netID);
}

答案 1 :(得分:0)

问题在于这一行:

tableView1 * secondView = (tableView1*)[mainStoryboard1 instantiateViewControllerWithIdentifier:@"userDetails"];

您现在正在制作一个额外的视图控制器。不要那样做!它是错误的视图控制器,它永远不会出现在界面中;你只是制造它,设置它,并毫无意义地扔掉它。 segue中的prepareForSegue已经为即将出现的视图控制器设置了destinationViewController。使用:

tableView1 * secondView = (tableView1*)segue.destinationViewController;

答案 2 :(得分:0)

你应该试试这个:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
       if ([segue.identifier isEqualToString:@"SegueIdentifier"]) {
           UIViewController *viewController = segue.destinationViewController;
           // you can also use custom view controllers but you have to add a cast to that custmo view controller
           [viewController setNetID:userNameTextField.text]; 
       }
    }

还要确保传递给UIViewController的值不是nil。