iPhone UIViewController初始化方法不被调用
我对iPhone编程非常新颖,并且遇到了一些奇怪的问题。对于下面的类,init方法永远不会被调用 - 我有一个NSLog函数,它应该告诉我什么时候init被执行。这里是相关的代码:iPhone UIViewController初始化方法不被调用
@interface MyViewController : UIViewController {
}
@end
@implementation MyViewController
- (id) init
{
NSLog(@"init invoked");
return self;
}
@end
任何想法,我做错了 - 如果有的话?希望我提供了足够的信息。
谢谢。
该视图提出了吗?使用这些方法进行额外的初始化:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
//...
}
// Implement viewDidLoad to do additional setup after loading the view.
- (void)viewDidLoad {
[super viewDidLoad];
//..
}
您可能是从NIB文件创建视图控制器。所以,与其叫“初始化”的消息,这是被称为一个创造者的消息:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
}
return self;
}
尝试,如果是被调用的一个。肖恩说的是真的。你可以使用这些消息来完成类似的事情。
祝你好运。
请参考参考文件中的'指定初始值设定项'。
但是,UI组件有时会有几个init *方法,我们是否需要重写所有这些方法才能执行一些init?东东?
如果您正在使用故事板,则会调用initWithCoder:
。参考文件说:
如果应用程序使用一个故事板定义视图控制器及其相关 意见,你的应用程序从未直接初始化该类 的对象。相反,视图控制器可以通过 故事板实例化 - 当触发Segue时由iOS自动执行,或者在应用程序调用故事板对象的 instantiateViewControllerWithIdentifier:方法时通过编程方式执行 。当从故事板实例化视图控制器时,iOS通过调用其initWithCoder:方法来初始化新视图 控制器。 iOS 自动将nibName属性设置为存储在 故事板内的nib文件。
的initWithCoder:
方法不是.m文件的默认模板的一部分,所以你要自己添加在您的UIViewController子类:
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
// Custom initialization
NSLog(@"Was called...");
}
return self;
}
没有必要从删除initWithNibName:bundle:
您代码,但它不会被调用。
谢谢!这工作。虽然它在我的嘴里留下一点酸味,看到iPhone上Obj-C的一些不一致。好吧。 – farhany 2009-04-21 11:53:43