У меня есть раскадровка, в которой используется пользовательский UIViewcontroller (мы будем называть его VC-A), который содержит два контроллера представления контейнеров в своем корневом представлении. Я хочу, чтобы VC-A собирал некоторые данные во время его инициализации и передавал их одному из дочерних vc во время их инициализации. Я предполагаю, что я не понимаю полностью правильного потока, чтобы это работало, поскольку это не представляется возможным. Я могу установить значения и запустить другие операции, переопределяя метод initWithCoder и установив VC-A в качестве делегата одного из других дочерних vc (я могу установить VC-A в качестве дочернего vc-делегата, а дочерний vc может запрашивать vc-a для данных но это может произойти только после того, как ребенок vc был инициализирован). Есть ли способ сделать это? или, более вероятно, где я пропускаю лодку по правильному потоку информации здесь? Спасибо за прочтение!Инициализировать контроллер представления с данными из контроллера контейнера в раскадровке
В VC-A
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"collectionEmbed"]) {
}
if ([segue.identifier isEqualToString:@"tableEmbed"]) {
ImageTableViewController *utvC = (ImageTableViewController *)segue.destinationViewController;
[utvC setUnitArray:[self vendUnitList]];
//A check on the debugger here shows that [[self vendUnitList] count] returns 5
}
}
В VC-B (Подкласс TableViewController
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
NSLog(@"%u",self.unitArray.count);
//Debugger shows this to be 0
return self.unitArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
UnitVO *unitVO = (UnitVO *)[unitArray objectAtIndex:indexPath.row];
NSLog(@"Unit Name: %@",unitVO.unit_name);
cell.textLabel.text = unitVO.unit_name;
return cell;
}
Некоторые Логгин
- (void)viewDidLoad
{
[super viewDidLoad];
if(self.tableView.delegate == self && self.tableView.dataSource == self)
{
NSLog(@"Yep");
}else{
NSLog(@"Nope");
}
// Get Yep for output
}
Раскадровка можно увидеть здесь: 1
Спасибо за ответ, я думаю, вы поняли вопрос bc, это именно то, что я пытаюсь сделать! Возможно, я пропустил подробности. В частности, я использую VC-A для предоставления данных для VC-B (B является контроллером tableview, который vc-a получает данные для). Насколько я понимаю, к моменту, когда структура добирается до prepareForSegue, дочерние контроллеры уже созданы таким образом, что к тому времени, когда я установилSomeValue, контроллер выложил представление и уже инициализирован. Я пытаюсь установить эти данные во время фазы инициализации VC-B –
@CollinWhite вы проверили настройку данных с помощью prepareForSegue? Я создал пару прототипов приложений, которые будут устанавливать данные для UITableView в этом методе, и таблица всегда заполняется данными при загрузке. – sbarow
Я обновил свой пост еще одним кодом, возможно, это прольет свет на то, где я ошибаюсь, спасибо за помощь! –