【问题标题】:When I switch back and forth between views, my viewDidLoad is not being called a second time?当我在视图之间来回切换时,我的 viewDidLoad 没有被第二次调用?
【发布时间】:2011-05-06 10:46:04
【问题描述】:

所以我有两种观点。当我启动应用程序时会加载一个视图。然后,当我按下该视图上的按钮时,它会加载另一个视图。

- (IBAction)triggerGame
{

leveldata = [[NSMutableDictionary alloc] init];

[leveldata setValue:@"hide" forKey:@"shootarrow"];

[leveldata writeToFile:[self levelFilePath] atomically:YES];
[leveldata release];


Papertoss_MaraAppDelegate *mainDelegate = (Papertoss_MaraAppDelegate *)[[UIApplication sharedApplication] delegate];
[mainDelegate playGame];

}

这个动作触发了委托实现中一个名为 playGame 的方法,如下所示:

- (void)playGame {

[levelView.view removeFromSuperview];
[self.window addSubview:[gameView view]];
[UIView commitAnimations];
}

这可以很好地加载新视图。然后我有另一个按钮,它做同样的事情,但它让我回到第一个视图。它也很好用。我能够很容易地从一个视图导航到另一个视图。但我唯一的问题是,当我再次尝试加载第二个视图时,不会再次调用 viewDidLoad。我通过在 viewDidLoad 方法中使用 NSLog() 对此进行了测试。

为了让我的应用程序执行我想要的操作,我需要再次调用 viewDidLoad。我猜当我在它们之间切换时,我的视图可能没有完全卸载。

非常感谢任何帮助。

【问题讨论】:

    标签: iphone cocoa-touch ipad uikit viewdidload


    【解决方案1】:

    你想要 -viewDidAppear: 用于“每次显示视图”的东西。

    【讨论】:

      【解决方案2】:

      我认为您需要函数 viewDidAppear。 viewDidLoad 每个视图只被调用一次,除非有什么导致它卸载,例如内存警告。每次视图变得可见时都会调用 viewDidAppear。

      【讨论】:

      • 如果我需要卸载它怎么办,因为我希望它根据我按下的按钮加载不同的层。我该怎么做?
      • 我不认为在这种情况下释放视图是最好的解决方案,它可以释放所有内存然后必须重新分配并稍后初始化一个新视图
      • 是的,我知道这不是最好的解决方案,但我想知道该怎么做。我究竟如何释放它?或者我应该问我应该在哪里发布它。
      • 我都明白了。感谢大家的帮助!
      猜你喜欢
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多