В моем приложении для iPhone у меня есть UIViewController, который имеет UITableView и другой UIView, в своем файле xib, представление xib содержит и UITableView, и другой UIView. Оба представления связаны как IBOutlets с соответствующими представлениями в xib-файле.
Когда я хочу программно установить источник данных для UITableView, я создаю такой метод в UIViewController:
- (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;
Наконец, я выделяю + init B и передаю экземпляр методу initWithNibName:bundle:tableDataSource:
, создающему UIViewController. Все представления отображаются в симуляторе, но методы источника данных, по-видимому, не вызываются.
Я делаю нечто подобное с другим контроллером и работает, но это UITableViewController, а TableView - это представление контроллера. Возможно ли, что, будучи подпредставлением, я должен установить источник данных в другом методе, отличном от initWithNib?
UPDATE:
Поместив назначение источника данных в метод viewDidLoad:
, я смог решить его. Мне кажется, что даже после вызова [self initWithNibName:nibNameOrNil bundle:nibBundleOrNil]
дочерние представления основного представления не запускаются должным образом