2011-11-01 99 views
1

在我的iPhone应用程序。方法ViewDidLoad不从子类调用?

我有两个视图控制器。

他们有SuperClass-SubClass关系(继承)。

让说ViewController1是一个SuperClass和ViewController2是一个子类。

它们都共享超类的通用笔尖文件。因此,理想情况下,ViewController1的所有方法都被继承到ViewController2(如果我没有在ViewController2中重写它)。

所以,要进行检查。当我

我viewcontroller2负载viewDidLoad中没有从超类中调用。

**ViewController1 

-ViewDidLoad 

-ViewWillApper 


**ViewController2 

Other methods but I am not writing ViewDidLoad and ViewWillAppear 
//--------------- 

所以,当这个单独的页面ViewController2被调用。 ViewDidLoad未被称为SuperClass。 但是ViewWillAppear被调用。

回答

1

可能是-viewDidLoad:仅被调用一次,因为两个类之间共享相同的nib文件。第一次将笔尖装入内存后,调用-viewDidLoad:。它不会被第二次调用,因为它只是从已存在的内存中重用,所以不需要重新加载。这可以解释为什么-viewWillAppear:仍然被调用。

UIViewController Class Reference: -viewDidLoad:

viewDidLoad中

控制器的视图后调用被加载到存储器中。

  • (无效)viewDidLoad中

讨论

视图控制器加载其相关联的视图到内存中后,此方法被调用。无论视图是存储在nib文件中还是以编程方式在loadView方法中创建 ,此方法都称为 。此方法通常用于对从nib文件加载的视图执行其他初始化步骤 。

0

你怎么能说你的ViewController1ViewController2都有继承?发布ViewController2.h文件的代码。

你做这样

@interface ViewController2 : ViewController1 { 
} 

如果你正在做类似上面那么只有你可以说你是从继承的VC1 VC2。只有这样你才能拨打VC1的viewDidLoad

如果您仅使用1个xib文件和2个VC,并且您讨论的案例并不意味着您正在继承。

当你写

ViewController1 *vc1 = [[ViewController1 alloc] initWithNibName:@"ViewController1"]; 

ViewController2 *vc2 = [[ViewController2 alloc] initWithNibName:@"ViewController1"]; 

这意味着你重用你的.xib文件,不继承的类...