2014-01-23 6 views
0

У меня есть раскадровка, в которой используется пользовательский 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

ответ

1

Почему бы вам не использовать это в VC-A для установки значений в VC-B

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    [segue.destinationViewController setSomeValue:_someValue]; 
} 

Надежда я правильно понял вопрос.

+0

Спасибо за ответ, я думаю, вы поняли вопрос bc, это именно то, что я пытаюсь сделать! Возможно, я пропустил подробности. В частности, я использую VC-A для предоставления данных для VC-B (B является контроллером tableview, который vc-a получает данные для). Насколько я понимаю, к моменту, когда структура добирается до prepareForSegue, дочерние контроллеры уже созданы таким образом, что к тому времени, когда я установилSomeValue, контроллер выложил представление и уже инициализирован. Я пытаюсь установить эти данные во время фазы инициализации VC-B –

+0

@CollinWhite вы проверили настройку данных с помощью prepareForSegue? Я создал пару прототипов приложений, которые будут устанавливать данные для UITableView в этом методе, и таблица всегда заполняется данными при загрузке. – sbarow

+0

Я обновил свой пост еще одним кодом, возможно, это прольет свет на то, где я ошибаюсь, спасибо за помощь! –

Смежные вопросы

 Смежные вопросы