在iPhone中没有调用ViewDidLoad方法?

时间:2011-02-01 10:55:42

标签: iphone viewdidload

我已使用自定义init方法将NSMutableDictionary传递给FirstClass。

第二课,

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方法中没有调用,如果我只调用“[self viewDidLoad]”,那么viewDidLoad方法可以正常工作。我不知道为什么viewDidLoad方法没有在没有其他方法的调用的情况下直接调用?请帮帮我。

感谢。

3 个答案:

答案 0 :(得分:2)

如果你是UIViewController的子类,我认为你是{期待viewDidLoad,那么你应该覆盖它的指定初始化,initWithNibName:bundle:如果你正在使用XIB,在这种情况下,{I}加载后将调用viewDidLoad。如果您没有使用XIB,则应实施loadView方法来创建视图,并在viewDidLoad完成后调用loadView

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:0)

您的init方法不正确。看起来应该是这样的:

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

  return self;
}

这假设FirstClass来自UIViewController

只要您的NIB文件与您的类名称相同,就应该自动加载 - 不需要loadBundle:调用。以下是the documentation关于nibName属性的说法:

  

如果此属性的值为nil   并且您没有覆盖loadView   自定义子类中的方法   视图控制器查找nib文件   谁的名字(没有.nib   extension)匹配你的名字   查看控制器类。