0

UIViewControllerオブジェクトのコレクションを閉じるのに問題があります。ロードされたすべてのモーダルUIViewControllerオブジェクトを一度に閉じるエレガントな方法を知りません。

Xcode 4の「ストーリーボード」を使用していますが、画面のマッピングにSeguesを使用していません。私は次のように動的コードを使用します:

それはすべてMainViewController.mから始まります。[myMenuController](メニューリスト)をロードします。ユーザーがメニューからオプションを選択すると、[myTicketController]がロードされます。そこでユーザーが操作した後、[myNextController]が読み込まれ、パターンが表示されます。いくつかのUIViewControllerを動的にロードします(ここではセグはありません):

//from MainViewController.m - Load the main menu
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
myMenuController = (MyMenuController *)[storyboard instantiateViewControllerWithIdentifier:@"MyMenuController"];
myMenuController.settingsModel = settingsModel;
myMenuController.ticketStatusHandler = data;
myMenuController.rootDataModel = dataModel;
[myMenuController setModalPresentationStyle:UIModalPresentationFullScreen];    
[self dismissModalViewControllerAnimated:NO];
[self presentModalViewController:myMenuController animated:YES];


///////////////////////////////////////////////////////////////////////////


//from MyMenuController.m - Load the add ticket menu
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
myTicketController = (MyTicketController *)[storyboard instantiateViewControllerWithIdentifier:@"MyTicketController"];
myTicketController.settingsModel = settingsModel;
myTicketController.ticketStatusHandler = data;
myTicketController.rootDataModel = dataModel;
[myTicketController setModalPresentationStyle:UIModalPresentationFullScreen];    
[self dismissModalViewControllerAnimated:NO];
[self presentModalViewController:myTicketController animated:YES];


///////////////////////////////////////////////////////////////////////////////

//from MyTicketController.m - Load the next screen
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
myNextController = (MyNextController *)[storyboard instantiateViewControllerWithIdentifier:@"MyNextController"];
myNextController.settingsModel = settingsModel;
myNextController.rootDataModel = dataModel;
[myNextController setModalPresentationStyle:UIModalPresentationFullScreen];    
[self dismissModalViewControllerAnimated:NO];
[self presentModalViewController: myNextController animated:YES];

そのため、アプリの最後に到達し、さらにいくつかのUIViewControllerをロードしました。[myNextController]がロードされた後、さらに4つまたは5つのUIViewControllerをロードするとします。

メモリ内にあるすべてのUIViewControllerをアンロードし、[myMenuController]をリロードする一般的な方法はありますか?

4

2 に答える 2

1

たとえば、アプリデリゲートでグローバル配列を定義し、その中にビューコントローラーを挿入することができます..すべてのビューコントローラーを閉じたい場合は、その中のすべてのオブジェクト(ビューコントローラー)を閉じるforループを作成します。たとえば、ビューコントローラをロードする場合は、特定のインデックスにビューコントローラを挿入できます

  1. 挿入するには[appDelegate.controllersArr insertObject:self atIndex:0];

  2. すべてのViewControllerをアンロードするには

        for(int i=0;i<[appDelegate.controllersArr count];i++)
    {           
        [[appDelegate.controllersArr objectAtIndex:i] dismissModalViewControllerAnimated:NO];
    }
    

これがお役に立てば幸いです。

于 2012-02-16T22:50:44.493 に答える
1

それらを「アンロード」(割り当て解除を意味すると思います) したい場合は、それらへの参照がないことを確認するだけです。したがって、それらを却下する必要があり(すでに行っているようです)、それらを参照する変数をリセットする必要があります。たとえば、MyMenuController作業が終わったらこれを行う必要がありますmyTicketController

[myTicketController release]; // if not using ARC
myTicketController = nil;  // if using ARC
于 2012-02-16T22:57:14.107 に答える