4

そのため、ストーリーボードに 3 つのビュー コントローラー (VC1、VC2、VC3) があります。

各ビューには IBAction を呼び出すボタンがあり、IBAction はこのメソッドを呼び出して別のビューにモーダルに移動します。

[self doSegue: myViewController_ID];

-(void) doSegue:(NSString *)_myViewController_ID
{
    //get UiViewController from storybord with Unique ID
    UIStoryboard *storyboard = self.storyboard;
    UITableViewController *svc = [storyboard instantiateViewControllerWithIdentifier:_myViewController_ID];

    //set presentation & transition styles
    svc.modalPresentationStyle = UIModalPresentationFullScreen;
    svc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

    //do segue
    [self presentViewController:svc animated:YES completion:nil];
}

VC2 で一度、VC1 から VC2 に移動するように設定しましょう

私が欲しいのは、以前のViewController(VC1)を削除することです。VC2 から VC3 に移動する場合は、ビュー階層またはスタック VC2 などから削除します。

これは、[self dismissViewControllerAnimated:YES completion:nil];メソッドを提供しないためです

スタック内のすべてのView Controllerの蓄積の結果としてメモリが増加することは望ましくありません。

注: ナビゲーション コントローラーやタブ コントローラーは使用せず、ビュー コントローラーのみを使用します。

ご協力いただきありがとうございます。

4

1 に答える 1

4

推測ですが、私は試していません...

VC2 で VC1 の参照を保持します -> prepareForSegue を使用して送信します。

次にVC2で

[self.previousViewController willMoveToParentViewController:nil];
[self.previousViewController removeFromParentViewController];

View Controllerに必ず挿入してください

- (void)dealloc
{
   NSLog(@"dealloc: %@", self);
}

そしてコンソールを見てください


編集:セグエの後に各View Controllerを削除する代わりに、メモリ警告を受け取ったときにそれを行うことができます。また、セグエの後に、dismissViewControllerAnimated:completion: で試すこともできます

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.

    // ???
    if ([self isViewLoaded] && self.view.window == nil) {
        NSLog(@"UNLOADING");
        self.view = nil;
        [self dismissViewControllerAnimated:NO completion:nil];
    }
}
于 2013-02-07T14:37:10.697 に答える