如何取消在Xcode 4中动态加载的UIViewController对象的集合 [英] How to dismiss a collection of UIViewController objects that were loaded dynamically in Xcode 4

查看:50
本文介绍了如何取消在Xcode 4中动态加载的UIViewController对象的集合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在解散UIViewController对象集合时遇到了一些麻烦.我不知道一种优雅的方式可以立即消除所有已加载的模态UIViewController对象.

I am having some trouble with dismissing a collection of UIViewController objects. I do not know of an elegant way to dismiss all loaded modal UIViewController objects at once.

我使用Xcode 4中的故事板",但我不使用Segues来映射屏幕.我使用动态代码,如下所示:

I make use of the "storyboard" in Xcode 4, but I do not use Segues to map the screens. I use dynamic code, like so:

所有操作均始于MainViewController.m.我加载[myMenuController](菜单列表).当用户从菜单中选择一个选项时,它将加载[myTicketController].在此处进行一些用户交互之后,它将加载[myNextController],您会看到该模式.我动态加载了几个UIViewControllers(这里没有问题):

It all starts in MainViewController.m. I load [myMenuController] (a menu list). When the user selects an option from the menu, it then loads [myTicketController]. After some user interaction there, it loads [myNextController] and you see the pattern. I load several UIViewControllers dynamically (no segues here):

//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];

所以我到了应用程序的结尾,并加载了更多的UIViewControllers.假设我在[myNextController]加载后再加载4或5个UIViewController.

So I get to the end of the app and have loaded several more UIViewControllers. Let's say I load 4 or 5 more UIViewControllers after [myNextController] has been loaded.

是否有一种通用方法可以卸载内存中的所有UIViewController,并只需重新加载[myMenuController]?

推荐答案

如果要卸载"它们(我想是指释放),您只需要确保没有对它们的引用即可.因此,您需要关闭它们(您似乎已经在执行此操作),并且您需要重置所有引用它们的变量,例如在 MyMenuController 中,使用 myTicketController 完成后,您需要执行以下操作:

If you want them to be "unloaded" (I assume you mean deallocated), you simply need to make sure there are no references to them. So you need to dismiss them (which you seem to already be doing), and you need to reset any variables that refer to them, e.g. in MyMenuController you need to do this when you're done with myTicketController:

[myTicketController release]; // if not using ARC
myTicketController = nil;  // if using ARC

这篇关于如何取消在Xcode 4中动态加载的UIViewController对象的集合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆