2

メニューとして機能するルートビューコントローラーがあります。アイテムを選択すると、フルスクリーンデータがモーダルに表示されます。戻るボタンを押すと、次のコードが実行されます。

BoardViewController.mの場合:

 - (IBAction)menuButtonPressed:(id)sender
    {
         [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
    }

メインメニューにうまく戻ります。しかし、この後、却下されたビューコントローラーを破棄したいと思います(プッシュ/ポップビューコントローラーを使用している場合など)。私はそれらの参照を保存しませんが、それらは却下された後もまだ生きています。どうすれば修正できますか?(ARCを使用)

編集

AppDelegate.mの場合:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ...
    MenuViewController *menuVC = [[MenuViewController alloc] init];
    self.window.rootViewController = menuVC;
    ...
}

MenuViewController.mの場合:

- (IBAction)newGame:(id)sender
    {
        BoardViewController *boardVC = [[BoardViewController alloc] init];
        boardVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self presentViewController:boardVC animated:YES completion:nil];
    }

編集2

さて、弱いデリゲートプロパティが問題を引き起こしました。全てに感謝!

4

3 に答える 3

3

私はARCを使用していませんが、モーダルコントローラーが解放されていない場合は、他の何かがまだそれを参照していることが原因である可能性があります。モーダルコントローラーは、それ自体を代理人として何かに追加しますか?

于 2012-08-16T11:42:58.143 に答える
2

ModalViewControllerの表示は、コードでは次のようになります。

- (void)showModal
{
    MyModalVC *mmvc = [[MyModalVC alloc] init];

    mmvc.dismissDelegate = self;

    UINavigationController *navController = [[UINavigationController alloc]
                                             initWithRootViewController:mmvc];

    navController.modalPresentationStyle = UIModalPresentationFormSheet; //or similar

    [self presentModalViewController:navController animated:YES];

    [cleaningTaskVC release]; //see that it is released after the presentation so that when you dismiss it you don't have to worry about the destruction of the object anymore
    [navController release];
}

最後のリリースは破壊を確実にするので、あなたがそれを却下するときにそれについて心配する必要はありません。

これは私がそれを却下する方法です(私がModalVCクラス内から使用するプロトコルとデリゲートを使用して)そしてその後、ModalVCのインスタンスは生きていません

- (void)didDismissModalView
{
    [self dismissModalViewControllerAnimated:YES];
}

うまくいけば、これはあなたが望むものです。

幸運を。

于 2012-08-16T08:56:12.133 に答える
1

これを試して、

- (IBAction)menuButtonPressed:(id)sender
{
   [self dismissModalViewControllerAnimated:YES];
}
于 2012-08-16T08:57:19.077 に答える