2011-03-15 203 views
0

此問題與this one有關。我有兩個構造函數:viewDidLoad在構造函數之前調用

- (id)initWithBanner:(NSMutableArray *)banners { 
    if (self = [super initWithNibName:@"UIBanner" bundle:nil]) { 
    testString = [[NSString alloc] initWithString:@"Banner"]; 
    NSLog(@"Foo"); 
    } 

    return self; 
} 

- (id)initWithPreview:(NSMutableArray *)previews { 
    if (self = [super initWithNibName:@"UIBanner" bundle:nil]; 
    testString = [[NSString alloc] initWithString:@"Preview"]; 
    NSLog(@"Foo"); 
    } 

    return self; 
} 

- (void)viewDidLoad { 
    NSLog(@"%@", testString); 
} 

在另一個對象我有這個類名爲* bannerPreview和* bannerVideo,與initWithPreview和initWithVideo初始化的兩個實例。這裏發生了什麼: 在預覽構造函數中,我無法訪問IBOutlets,因爲它們是零,而它們不在橫幅中。但bannerVideo的方法viewDidLoad在構造函數完成之前被調用,而bannerPreview的viewDidLoad不會。我在上面列出的兩種方法中添加了類的字符串測試和的NSLog(@「富」)和我的輸出是:

2011-03-15 12:29:13.929 iUDC[2600:207] Foo 
2011-03-15 12:29:13.934 iUDC[2600:207] preview 
2011-03-15 12:29:15.038 iUDC[2600:207] (null) 
2011-03-15 12:29:15.038 iUDC[2600:207] Foo 

我應該如何處理這個問題?

回答

0

你在init中做什麼應該獨立於你在viewDidLoad中做什麼。任何依賴於self.view的應該在viewDidLoad中完成。

是否在init完成之前或之後調用viewDidLoad取決於加載視圖需要多長時間以及執行init需要多長時間。

+0

所以...如果我必須做一些初始化處理,需要我應該只給出在構造函數啓動。對?那麼奧特萊斯呢?他們不是從[super initWithNibName:bundle:]初始化的嗎? – IssamTP 2011-03-15 13:37:51

0

您的initWithPreview:方法中有一個錯誤。它應該可能會說:

[super initWithNibName:@"UIPreview" bundle:nil] 
相關問題