【问题标题】:ViewController not performing segue programmaticallyViewController 没有以编程方式执行 segue
【发布时间】:2017-05-12 00:05:31
【问题描述】:

我遇到了一些我从未见过的事情。场景如下。我最初的 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"];
    }
}

在情节提要中,我有一个将初始 VC 与 MainVC 连接起来的 segue,该 segue 的标识符与“pushMainVC”匹配,如果我关闭并重新打开应用程序(在注册后),则确实会发生 segue。两个实例的控制台输出(注册并关闭并重新打开应用后重新加载初始 VC)如下:

APPNAME[4106:1628238] 主线程-是

APPNAME[4106:1628238] 将开始 pushToAuthenticate

APPNAME[4106:1628238] PrepareForSegue-pushMainVC

任何想法为什么会发生这种情况,我遗漏的任何小东西,或任何帮助都将不胜感激。太感谢了。

【问题讨论】:

  • 据我所知,NSUserDefault 不保存 NSObject 子类自定义对象
  • 你试过在viewWillAppear而不是viewDidLoad推segue吗?
  • @SahebRoy 如果您使您的自定义类符合 NSCoding 并实现 initWithCoder 和 encodeWithCoder,则可以。
  • 哦,你确实实现了。没关系

标签: ios objective-c


【解决方案1】:

您正试图从viewDidLoad 执行推送转场。但是你不能这样做,因为它为时过早; viewDidLoad 表示视图存在,但还没有在界面中。你需要等到有一个接口,这样你才有东西可以推送。

【讨论】:

  • 我可以从 viewDidLoad 中展示它吗?
  • 不,太早了!还没有接口。
【解决方案2】:

您不能尝试从故事板本身加载它。 像这样:

    pushMainVC* pushMainV = [self.storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([pushMainVC class])];

    [self.navigationController pushViewController:pushMainV animated:YES];

注意: 不要忘记提供您的视图控制器故事板 ID。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多