-1
  • VC1 は、コンテナー ビューに VC2 を埋め込みます。VC2 はテーブル VC です。

  • VC2 のセルをクリックすると、VC3 がプッシュされます。

  • VC3 は、コンテナー ビューに VC4 を埋め込みます。

ビジュアルVC4.m 内から VC1 への参照 を取得するにはどうすればよいですか?

試しself.parentViewController.presentingViewController.parentViewControllerてみself.parentViewController.presentingViewControllerましたが、うまくいかないようでした。

しかし、デリゲートを使用して VC1 への参照を格納したときに、それが機能するかどうかを確認することにしましたが、それでも VC1 のすべてのパブリック プロパティに対して null を取得していました。このシナリオでは、VC1 はメモリ内にありませんか? そうでない場合、なぜですか?もしそうなら、なぜその (強い) プロパティが null になるのでしょうか?

編集:また、NSLogs を介して、VC2 でデリゲート参照の実行と設定が完了viewDidLoadする前に VC4 で実行されることを発見しました。これは、そのアプローチが機能しない理由を説明している可能性があります。didSelectRowAtIndexPath次の VC が の他のすべての行の完了時にのみプッシュされるようにするにはどうすればよいdidSelectRowAtIndexPathですか? それに関係なく、VC1には行が選択される前にすでに設定されている(nullではない)他のパブリックプロパティがあり(VC2のNSLogでこれを確認しましたdidSelectRow)、アクセスしようとすると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);
}

スタックトレース

4

1 に答える 1