2011-02-01 50 views
0

我已经使用自定义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方法没有在另一个方法中调用时没有直接调用?请帮助我。

谢谢。

+1

也许是因为没有视图被加载? – woodleader 2011-02-01 10:58:38

+0

呃,它是`NSLog`而不是`NSLOG`,因为你在那里。它的子类是什么?我认为`viewDidLoad`只能在`UIViewController`子类中调用。尽管如此,不要引用我的话。 – 2011-02-01 11:06:21

+0

@Aurum:没错。 viewDidLoad方法在其视图完成加载后在控制器上调用。 – 2011-02-01 11:14:16

回答

0

您的init方法不正确。它应该是这个样子:

- (id) initWithFeedData:(NSMutableDictionary *) dataDictionary { 
    if (self = [super init]) { 
    // TODO: do initialisation stuff with dataDictionary 
    } 

    return self; 
} 

这假定FirstClassUIViewController的。

只要您的NIB文件与您的班级名称相同,就应该自动加载 - 不需要拨打loadBundle:。下面是the documentation说对nibName属性:

如果此属性的值是零 和你没有你的自定义子类覆盖的loadView 法, 视图控制器寻找一个笔尖文件 名字(不包含.nib 扩展名)与您的视图控制器类的名称相匹配。

2

如果你继承一个UIViewController,我以为你是因为你期待viewDidLoad,那么你应该,如果您使用的是厦门国际银行,在这种情况下viewDidLoad将被称为覆盖其指定的初始化器,initWithNibName:bundle:在XIB加载之后。如果你不使用XIB,你应该实现loadView方法来创建你的视图,viewDidLoad将在loadView完成后调用。

1

@Stephen是对的,至少你需要重写你的init语句返回self。但是,在视图控制器上声明一个属性并以这种方式传递对象会更容易,更健壮。

FirstClass *firstClass = [[FirstClass alloc] initWithNibNamed:nil]; 
firstClass.feedDictionary = feedDictionary; 

[self.navigationController pushViewController:firstClasss animated:YES]; 
[firstClass release]; 

viewDidLoad方法将被调用,您feedDictionary会坐在那里,等着你。

相关问题