HM1*_*HM1 1 iphone cocoa-touch objective-c
我被卡住了!我不明白为什么viewWillAppear不在我的代码中运行但viewDidLoad运行.如果我理解正确viewDidLoad在第一个实例上运行一次,并且每次将视图添加到要显示的视图堆栈时viewWillAppear都会运行.
我看到其他人遇到过这个问题,但是他们调用viewWillAppear的解决方案直接导致我的应用程序崩溃.其他解决方案与导航控制器和pushView相关,但这不是我正在使用的!我错过了什么?
在此先感谢您的帮助!:)
请参阅以下内容:View Controller#1 - 当前正在屏幕上显示
-(IBAction)someButtonPressed:(id)sender{
NSLog(@"FirstViewController - someButtonPressed");
SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
secondViewController.myLocation = self.myLocation;
secondViewController.myDatabase = self.myDatabase;
[self.view addSubview:secondViewController.view];
//[secondViewController viewWillAppear:YES];
}
Run Code Online (Sandbox Code Playgroud)
SecondViewController:
- (void)viewWillAppear:(BOOL)animated {
NSLog(@"SecondViewController - viewWillAppear");
[super viewWillAppear:animated];
// updating ivars with data
}
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
NSLog(@"SecondViewController - viewDidLoad");
[super viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud)
如果我理解正确viewDidLoad在第一个实例上运行一次,并且每次将视图添加到要显示的视图堆栈时viewWillAppear都会运行.
-viewDidLoad每次加载UIViewController的视图时都会调用它.这可能单个控制器的一生中有很多倍的观点可能被卸载以释放内存时,它是不可见的,重载,触发另一个调用-viewDidLoad,在需要的时候.
-viewWillAppear:当UIViewController的视图变得可见时调用.但是UIKit假设UIViewController的视图将填满他们的窗口.嵌套UIViewControllers的视图是滥用UIViewControllers的一个例子,会导致意外行为.如你所见.
请参阅适用于iOS的View Controller编程指南中的关于自定义视图控制器:
您创建的每个自定义视图控制器对象都负责管理单个视图层次结构中的所有视图.在iPhone应用程序中,视图层次结构中的视图通常覆盖整个屏幕,但在iPad应用程序中,它们可能仅覆盖屏幕的一部分.视图控制器与其视图层次结构中的视图之间的一对一对应关系是关键设计考虑因素.您不应使用多个自定义视图控制器来管理同一视图层次结构的不同部分.同样,您不应使用单个自定义视图控制器对象来管理多个屏幕内容.
| 归档时间: |
|
| 查看次数: |
8937 次 |
| 最近记录: |