2010-07-30 85 views
3

在我的iPhone應用程序我有了一個UITableView和另一個UIView的,在它的XIB文件中,廈門國際銀行的觀點既包含的UITableView和其他UIView的一個UIViewController。兩個視圖都作爲IBOutlets鏈接到xib文件中的相應視圖。 當我想以編程方式爲我在UIViewController中創建這樣一個方法的UITableView設置數據源:的UITableView:編程設置數據源

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil tableDataSource:(id)dataSource{ 
if ((self = [self initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { 
    // Custom initialization 
    self.inventoryTableView.dataSource = dataSource; 
    //[self.inventoryTableView reloadData]; 
} 
return self;} 

,然後我實現另一個類礦井下面的方法,我們稱之爲B:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 

最後我alloc + init B並將實例傳遞給創建UIViewController的方法initWithNibName:bundle:tableDataSource:。所有視圖都顯示在模擬器中,但數據源方法似乎不被調用。 我做了一些與另一個控制器類似的工作,但它是一個UITableViewController,而TableView是控制器的視圖。是否有可能是一個子視圖,我必須設置數據源的另一種方法不同於initWithNib?

UPDATE: 通過將數據源分配的viewDidLoad:方法我能解決這個問題。在我看來,即使調用[self initWithNibName:nibNameOrNil bundle:nibBundleOrNil]的主視圖的子視圖後不能正常inited

回答

0

如更新和評論說,我通過改變在哪裏設置委託/數據源,因爲它是需要等待的tableView被分配和inited解決。這在我看來,作爲一個子視圖它被分配/晚inited不是類

+0

你可以發佈您的viewDidLoad方法?我試圖做同樣的事情,你卻在viewDidLoad方法你設置self.table.dataSource什麼?在你的代碼中,你可以將它設置爲init方法中可用的dataSource – RyanG 2011-05-27 18:24:50

2

這個答案看一看,我認爲這是類似於你在使用「B」作爲外部數據源提出什麼控制器。

Simple way to separate UITableview datasource and delegate from main UIViewController class?

+0

我讀到的主視圖和它裏面太的鏈接。 我不想從IB通過(並讓它istanziate我的數據源類),我只是想以編程方式做到這一點(和在帖子中說我已經做了另一個類似的情況)。 – rano 2010-07-30 15:25:22

+0

我似乎通過在'viewDidLoad:'方法中設置數據源來解決它。但我仍然不明白爲什麼它的工作原理爲其他類 – rano 2010-07-30 16:52:26