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

  • 单击 VC2 中的单元格会推动 VC3。

  • VC3 将 VC4 嵌入到容器视图中。

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

我试过了self.parentViewController.presentingViewController.parentViewControllerself.parentViewController.presentingViewController但它们似乎没有用。

但后来我决定看看当我使用委托来存储对 VC1 的引用时它是否可以工作,但对于 VC1 上的所有公共属性,我仍然得到空值。在这种情况下,VC1 会不在内存中吗?如果不是,为什么不呢?如果是这样,为什么它的(强)属性会为空?

编辑:我也刚刚通过 NSLogs 发现viewDidLoad在 VC4 中执行之前didSelectRowAtIndexPath在 VC2 中完成执行和设置委托引用,这可以解释为什么这种方法不起作用。如何确保仅在完成所有其他行时才推送下一个 VC didSelectRowAtIndexPath?不管怎样,VC1 上的其他公共属性在选择一行之前已经设置(非空)(我刚刚didSelectRow在 VC2 中使用 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);
}

堆栈跟踪

4

1 回答 1

3

当您从表格视图单元格设置推送转场时,转场会在tableView:didSelectRowAtIndexPath:调用该方法之前触发。prepareForSegue:sender:您需要在源视图控制器的方法中将您的信息传递给目标视图控制器。

此外,您可能会发现此答案很有帮助。

您可能还会发现知道sender参数 inprepareForSegue:sender:是表格视图单元格并且表格视图indexPathForSelectedRow已经设置为单元格的索引路径很有用。

于 2013-07-01T07:30:18.500 回答