【问题标题】:performSegueWithIdentifier and viewDidLoadperformSegueWithIdentifier 和 viewDidLoad
【发布时间】:2015-05-22 01:08:20
【问题描述】:

主视图控制器:

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

Segue 目标控制器:

- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"Show text!");
[self performSegueWithIdentifier:@"showSignUp" sender:self]; }

为什么目标控制器的 viewDidLoad 方法中的代码不执行?

【问题讨论】:

  • 编辑问题并添加日志中显示的错误:“视图未加载到窗口层次结构中”。 PKP 回复了正确的解决方案。
  • 第一次转场有效吗?
  • 你应该调用 performSegue... 在 vi​​ewDidAppear 中调用。

标签: ios objective-c xcode segue


【解决方案1】:

viewDidLoad 在创建 ViewController 对象时调用,加载 nib 文件。它尚未连接到窗口。您应该调用 performSegue... 在 vi​​ewDidAppear 中调用。

最后,如果您直接调用 performSegue 而不执行任何操作。我建议你再看看流程。

【讨论】:

  • 那么 viewDidLoad 方法是只为情节提要的初始场景调用的吗?
  • 没有。它在创建时为每个 ViewController 调用。 (当你这样做时:[[ViewController alloc] initWithNib:] 并成功创建)。在这种情况下,当您准备 Segue 时,它​​会在内部调用
  • 所以,我执行Segue... 然后destinationViewController allocs 和initswithnib 然后执行viewDidLoad 方法。我说的对吗?
  • 在意外状态下完成导航转换。导航栏子视图树可能会损坏。我明白了
  • 你是在 viewDidAppear 的 viewWillAppear 中推新的 segue 吗?在不了解上下文的情况下很难猜测问题。如果您在第一个 viewController 中所做的只是在没有任何操作的情况下推送第二个,为什么不直接推送第二个 viewController?
【解决方案2】:

如果您复制并粘贴,我认为这是因为您缺少编译器应该警告您的 "

如果“在你准备 segue 中尝试一个 NSLog 并查看它是否被调用

【讨论】:

  • 如果不检查故事板中的 segue 标识符并确保它们匹配
  • 它在我的模拟器中显示了目标控制器,所以segue工作正常,只是目标的viewdidload方法没有执行?我不明白为什么..(我检查了故事板标识符,那里一切正常)
  • 尝试将视图设置为初始视图控制器并查看它是否被调用,同时确保您拥有该控制器的正确故事板类
  • 如果调用加载视图,则应始终调用 viewdidload。如果该视图在没有加载类的情况下加载,您将不会收到通知
猜你喜欢
  • 1970-01-01
  • 2012-01-17
  • 2013-06-16
  • 2016-10-15
  • 1970-01-01
  • 2012-02-28
  • 2012-02-14
  • 1970-01-01
  • 2011-09-12
相关资源
最近更新 更多