我遇到了一些我从未见过的东西。方案如下。我的初始VC有一个注册按钮,当点击时会显示几个单独的视图控制器处理注册过程(我要求用户凭据,如果服务器需要,我要求验证码)。完成此过程后,我将自定义对象保存到稍后需要的NSUserDefaults。然后再次显示初始VC。
基本上,我确保我在主线程中并保存自定义对象。如果满足这些条件,我会推送应用程序的主要部分。
这是相关代码,我的所有日志都显示在输出窗口中,但不会发生segue。
- (void)viewDidLoad {
[super viewDidLoad];
self.complete = false;
if([NSThread isMainThread]){
NSLog(@"Main Thread-Yes");
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"CUSTOMOBJECT"]) {
NSLog(@"Will begin pushToAuthenticate");
[self pushAuthenticateController];
}
} else {
NSLog(@"Main Thread-No");
}
}
- (void)pushAuthenticateController{
[self performSegueWithIdentifier:@"pushMainVC" sender:self];
}
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"pushMainVC"]) {
NSLog(@"PrepareForSegue-pushMainVC");
[segue.destinationViewController.navigationItem setHidesBackButton:YES];
[segue.destinationViewController.navigationItem setTitle:@"MainVC"];
}
}
在故事板中我有一个segue连接初始VC和MainVC,该segue的标识符匹配" pushMainVC",如果我关闭并重新打开应用程序(注册后),则会发生segue。两个实例的控制台输出(在注册和关闭以及重新打开应用程序后重新加载初始VC)如下:
APPNAME [4106:1628238]主线索 - 是
APPNAME [4106:1628238]将开始pushToAuthenticate
APPNAME [4106:1628238] PrepareForSegue-pushMainVC
任何想法为什么会发生这种情况,我错过的任何小事或任何帮助都将不胜感激。非常感谢。
答案 0 :(得分:1)
您正尝试从viewDidLoad
执行推送segue。但你不能这样做,因为它太早了; viewDidLoad
表示视图存在但尚未出现在界面中。你需要等到有一个界面,这样才能有所推动。
答案 1 :(得分:0)
您无法尝试从storayboard本身加载它。 像这样:
pushMainVC* pushMainV = [self.storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([pushMainVC class])];
[self.navigationController pushViewController:pushMainV animated:YES];
注意: 别忘了给你的viewcontroller故事板ID。