2012-09-18 27 views
2

我在UITableViewController的子類中有以下代碼。在iOS 5.1下它工作正常,但在iOS 6下,self.tableView無(在模擬器和實際設備上)。我做錯了嗎?爲什麼初始化後視圖不會立即設置?在UITableViewController中的tableView是零後初始化

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 

    if (self) 
    { 
     UIView * bck = [[UIView alloc] init]; 
     [bck setBackgroundColor:[UIColor whiteColor]]; 
     self.tableView.backgroundView = bck; 
     [bck release]; 
    } 

    return self; 
} 

編輯:

我已經明確了這個問題:

我有類

AccountsListViewController_iPad 

這是

AccountsListViewController : UITableViewController 

AccountsListViewController有子它是桌面在init之後加載的eView &視圖(就像我期望的那樣)。另一方面AccountsListViewController_iPad的視圖和tableView等於零。我從AccountsListViewController_iPad所以現在去除一切看起來如下:

.h 
#import <UIKit/UIKit.h> 
#import "AccountsListViewController.h" 
@interface AccountsListViewController_iPad : AccountsListViewController 
@end 

.m 
#import "AccountsListViewController_iPad.h" 
@implementation AccountsListViewController_iPad 
@end 

而且還有它的觀點是零。在我看來,它的行爲應該和它的超類完全一樣,但事實並非如此。

回答

2

好吧,我已經工作了:

有AccountsListViewController_iPad類及相關AccountsListViewController_iPad.xib文件。 Xib,儘管沒有在xib中的代碼和文件所有者的任何地方加載而不是AccountsListViewController_iPad,但仍在加載。出於某種原因,xib中的表視圖被設置爲文件所有者屬性'table'(不存在),因此view和tableView爲零。

我仍然不知道爲什麼xib被加載或爲什麼它存在的問題發生在iOS 5.x下

+0

就是這樣。當我使用「New File - > Cocoa Touch Class」創建xib時,它發生了。 – Joqus

3

我懷疑這是因爲表視圖不加載,直到加載視圖。您應該將視圖設置移動到viewDidLoad

唯一的「視圖」你應該建立在init方法屬性是.navigationItem(雖然我覺得UINavigationItem可能是最好的控制器的考慮一部分,而不是視圖)。

+0

這就是我的想法。我不明白爲什麼這突然停止在iOS 6中工作?或者是偶然發生的事情? –

+0

@Rafał我懷疑,在iOS 6之前,tableView被延遲加載到getter中,但現在它被加載到'loadView'中。 (我懷疑你可以通過在'self.tableView.backgroundView = bck;'之前調用'self.view;'來強制加載'tableView',但不要這麼做,請按照正確的方式使用'viewDidLoad'。 ) –

相關問題