VC1 включает VC2 в виде контейнера. VC2 - это таблица VC.взаимодействия между представленными и встроенными контроллерами обзора
Щелчок по ячейке в VC2 толкает VC3.
VC3 вставляет VC4 в виде контейнера.
Как получить ссылку на VC1 изнутри VC4.m?
Я пробовал self.parentViewController.presentingViewController.parentViewController
и self.parentViewController.presentingViewController
, но они, похоже, не работали.
Но потом я решил посмотреть, будет ли это работать, когда я использовал делегат для хранения ссылки на VC1, и все же я получал null для всех публичных свойств на VC1. Не будет ли VC1 не в памяти в этом сценарии? Если нет, почему бы и нет? Если да, то почему другие его (сильные) свойства были бы пустыми?
Редактировать: Я также только что открыл через NSLogs, что viewDidLoad
в VC4 выполняет до didSelectRowAtIndexPath
в VC2, завершает выполнение и установку ссылки делегата, что может объяснить, почему этот подход не работает. Как обеспечить, чтобы следующий VC был нажат только по завершении всех остальных строк в didSelectRowAtIndexPath
? И независимо от того, существуют ли другие публичные свойства на VC1, которые уже установлены (не равны нулю) до выбора строки (я только что проверил это с помощью NSLog в didSelectRow
в VC2), и они начинают показывать null, когда я пытаюсь доступ к ним через VC4 с помощью любого подхода.
(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here. Create and push another view controller.
/*
<#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
// ...
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
*/
// set reference to selected convo. it is stored in ConversationsParentVC public property
self.conversationsParentVC.selectedConvo = self.conversationsParentVC.conversationsArray[indexPath.row];
// temp
AppDelegate *delegate = getAppDelegate;
delegate.activeVC = self.conversationsParentVC;
ConversationsParentVC *convosParentVC = (ConversationsParentVC*)delegate.activeVC;
NSLog(@"boop %@", delegate.activeVC);
NSLog(@"beep %i", convosParentVC.conversationsArray.count);
}
Опубликуйте свой исходный код 'tableView: didSelectRowAtIndexPath:'. –
@robmayoff Не очень, но я разместил его. Спасибо, что посмотрели. – mkc842
Вы используете раскадровку? Что такое трассировка стека, когда вызывается «viewDidLoad» VC4? –