Ios 显示视图控制器和嵌入式视图控制器之间的交互

Ios 显示视图控制器和嵌入式视图控制器之间的交互,ios,Ios,VC1将VC2嵌入到容器视图中。VC2是一个表VC 单击VC2中的单元格将推送VC3 VC3将VC4嵌入到容器视图中 如何从VC4.m中获取对VC1的引用 我尝试了self.parentViewController.presentingViewController.parentViewController和self.parentViewController.presentingViewController,但它们似乎不起作用 但是当我使用委托来存储对VC1的引用时,我决定看看它是否会起作用,而

VC1将VC2嵌入到容器视图中。VC2是一个表VC

单击VC2中的单元格将推送VC3

VC3将VC4嵌入到容器视图中

如何从VC4.m中获取对VC1的引用

我尝试了self.parentViewController.presentingViewController.parentViewController和self.parentViewController.presentingViewController,但它们似乎不起作用

但是当我使用委托来存储对VC1的引用时,我决定看看它是否会起作用,而VC1上的所有公共属性仍然是null。在这种情况下VC1是否不在内存中?若否,原因为何?如果是这样,为什么它的强属性会为空

编辑:我刚刚通过NSLogs发现VC4中的viewDidLoad在VC2中的DidSelectRowatineXpath完成执行和设置委托引用之前执行,这可能解释了为什么这种方法不起作用。如何确保只有在完成DidSelectRowatineXpath中的所有其他行时才推送下一个VC?不管怎样,在选择行之前,VC1上的其他公共属性已经设置为非空。我刚刚用VC2中didSelectRow中的NSLog验证了这一点,当我尝试通过任何方法通过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:DidSelectRowatineXpath:方法之前触发。您需要在源视图控制器的prepareforsgue:sender:方法中将信息传递给目标视图控制器

此外,您可能会发现这很有帮助


您还可能会发现,了解prepareForSegue:sender:中的sender参数是表视图单元格,并且表视图的indexPathForSelectedRow已设置为单元格的索引路径是很有用的。

发布您的表视图:didSelectRowAtIndexPath:源代码。@robmayoff不太多,但我已经发布了它。谢谢你看。你在用故事板吗?调用VC4的viewDidLoad时堆栈跟踪是什么?@robmayoff是的,我使用的是故事板。我以前从未看过堆栈跟踪,但希望这会有所帮助。为什么需要引用?在这个过程中,您可能应该传递一些代理对象或协议对象,而不是尝试在VC层次结构中导航。