我正在使用故事板和条件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中但这也无济于事。知道我做错了什么吗?它拉起第二个视图控制器,只需找到
答案 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。