ViewDidLoad方法不会在iPhone中调用?
我已经使用自定义init方法将NSMutableDictionary传入FirstClass。ViewDidLoad方法不会在iPhone中调用?
二等功,
firstClass = [[FirstClass alloc] initWithFeedData:feedDictionary];
[self.navigationController pushViewController:firstClasss animated:YES];
的Firstclass,
- (FirstClass *) initWithFeedData:(NSMutableDictionary *) dataDictionary {
{
NSLog(@"%@", dataDictionary);
[[NSBundle mainBundle] loadNibNamed:@"FirstClass" owner:self options:nil];
//[self viewDidLoad]; Without call, ViewDidLoad method doesn't call.
}
- (void) viewDidLoad {
[super viewDidLoad];
NSLOG(@"Inside View DidLoad"); // This method never calls.
}
在我viewDidLoad方法不叫,如果我叫 “[个体经营的viewDidLoad]” 那么只,viewDidLoad方法正常工作。我不知道为什么viewDidLoad方法没有在另一个方法中调用时没有直接调用?请帮助我。
谢谢。
您的init
方法不正确。它应该是这个样子:
- (id) initWithFeedData:(NSMutableDictionary *) dataDictionary {
if (self = [super init]) {
// TODO: do initialisation stuff with dataDictionary
}
return self;
}
这假定FirstClass
从UIViewController
的。
只要您的NIB文件与您的班级名称相同,就应该自动加载 - 不需要拨打loadBundle:
。下面是the documentation说对nibName
属性:
如果此属性的值是零 和你没有你的自定义子类覆盖的loadView 法, 视图控制器寻找一个笔尖文件 名字(不包含.nib 扩展名)与您的视图控制器类的名称相匹配。
如果你继承一个UIViewController
,我以为你是因为你期待viewDidLoad
,那么你应该,如果您使用的是厦门国际银行,在这种情况下viewDidLoad
将被称为覆盖其指定的初始化器,initWithNibName:bundle:
在XIB加载之后。如果你不使用XIB,你应该实现loadView
方法来创建你的视图,viewDidLoad
将在loadView
完成后调用。
@Stephen是对的,至少你需要重写你的init语句返回self
。但是,在视图控制器上声明一个属性并以这种方式传递对象会更容易,更健壮。
FirstClass *firstClass = [[FirstClass alloc] initWithNibNamed:nil];
firstClass.feedDictionary = feedDictionary;
[self.navigationController pushViewController:firstClasss animated:YES];
[firstClass release];
你viewDidLoad
方法将被调用,您feedDictionary
会坐在那里,等着你。
也许是因为没有视图被加载? – woodleader 2011-02-01 10:58:38
呃,它是`NSLog`而不是`NSLOG`,因为你在那里。它的子类是什么?我认为`viewDidLoad`只能在`UIViewController`子类中调用。尽管如此,不要引用我的话。 – 2011-02-01 11:06:21
@Aurum:没错。 viewDidLoad方法在其视图完成加载后在控制器上调用。 – 2011-02-01 11:14:16