私は、含まれているビューコントローラの詳細については、簡単なテストを行いました。
は私が追加/アクション2つのボタンを使用してビュー・コントローラを除去ビューコントローラ有する:didMoveToParentViewControllerが2回呼び出されました
- (IBAction)myInfoAddAction:(id)sender {
profileViewController = [[ProfileViewController alloc] init];
[self addChildViewController: profileViewController];
UIView *__view = profileViewController.view;
[self.view addSubview: __view];
[profileViewController didMoveToParentViewController: self];
}
- (IBAction)myInfoRemoveAction:(id)sender {
[profileViewController willMoveToParentViewController: nil];
[profileViewController.view removeFromSuperview];
[profileViewController removeFromParentViewController];
}
クラスProfileViewController
延びUIViewController
とオーバーライドwillMoveToParentViewController
とdidMoveToParentViewController
方法を
-(void)willMoveToParentViewController:(UIViewController *)parent
{
[super willMoveToParentViewController: parent];
NSLog(@"willMoveToParentViewController -> %@", self);
}
-(void) didMoveToParentViewController:(UIViewController *)parent
{
[super didMoveToParentViewController: parent];
NSLog(@"didMoveToParentViewController -> %@", self);
}
-(void)viewWillAppear:(BOOL)animated
{
NSLog(@"viewWillAppear -> %@", self);
}
-(void)viewDidDisappear:(BOOL)animated
{
NSLog(@"viewDidDisappear -> %@", self);
}
Iビュー・コントローラを追加私は次のログを取得しました:
willMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
viewWillAppear -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
私は、ビューコントローラを削除する場合:
willMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
viewDidDisappear -> <ProfileViewController: 0x8c52ea0>
didMoveToParentViewController -> <ProfileViewController: 0x8c52ea0>
私は二回呼び出されるのはなぜ
didMoveToParentViewController
知りたい
?
ありがとうございます!
親もログに記録できますか?私は、あなたが以前のコントローラを離れることを示すために、それらのケースの1つでは、「無」と考えています。 –
それはかなり変です。たぶん、メソッドにブレークポイントを置き、スタックトレースを監視する必要があります。しかし、私は2番目の呼び出しが 'addSubview'と' removeFromSuperview'によって引き起こされると思います。 – Sulthan
最近同じ問題が発生しました。 ** removeFromParentViewController **を呼び出す前** ** removeFromSuperview **は私の問題を修正したようです。これはAppleの例があなたのようにそれを設定しているのを見ると奇妙なことです。 https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html#//apple_ref/doc/uid/TP40007457-CH11-SW3 –