1

我正在使用一个故事板和一个似乎可以正常工作的条件转场。但是,当我将字符串传递给新视图控制器时,当我尝试使用 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 中,但这也无济于事。知道我做错了什么吗?它拉起第二个视图控制器刚刚找到

4

3 回答 3

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);
}
于 2013-04-25T15:42:44.620 回答
0

问题是这一行:

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

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

tableView1 * secondView = (tableView1*)segue.destinationViewController;
于 2013-04-25T15:36:46.093 回答
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 的值不为零。

于 2013-04-25T15:41:20.877 回答