2011-02-01 51 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會坐在那裏,等着你。

相關問題