我们有一个标签栏+导航控制项目。我们通过界面构建器创建了一个标签栏,并通过界面构建器将所有标签项添加到标签栏控制器。 我们的应用程序有一个登录屏幕,我们在开始时将其显示为模式表单。用户通过身份验证后,将关闭登录屏幕(使用dismissModalScreen)并显示MainWindow。这一切都很好。
现在,我们点击退出选项,我们应该显示登录屏幕。我们也能够证明这一点。但问题是,一旦用户再次进行身份验证,我们希望新加载所有屏幕。目前,所有屏幕都保持其状态并保留以前的数据。
我们试图做的是:
[AppDelegate tabBarController release];
AppDelegate.tabBarController = nil;
我们尝试发布tabBarController并将其设置为nil。但是一旦显示视图,我们就无法选择任何选项卡,视图也是空白的。
我们需要的是:
一旦用户第二次登录,如何释放并重新加载作为tabbar一部分的每个viewcontroller。
非常感谢您的帮助。
答案 0 :(得分:0)
我们找到了出路。我们现在正在做的是,一旦用户重新登录,我们将释放视图控制器并重新创建它们并将其设置回uitabbar。
NSMutableArray * arrControllers = [[AppDelegate.tabBarController.viewControllers] mutablecopy]; [arrControllers removeAtIndex:3]; [arrControllers removeAtIndex:2];
----创建新的控制器
UIViewController viewController2 = [[UIViewController alloc] initWithNibName:@“viewController2”bundle:nil] autorelease];
UIViewController viewController3 = [[UIViewController alloc] initWithNibName:@“viewController3”bundle:nil] autorelease];
- 创建导航控制器
UINavigationController navViewController2 = [[[[UINavigationController alloc] initWithRootViewController:viewController2] autorelease];
UINavigationController navViewController3 = [[[[UINavigationController alloc] initWithRootViewController:viewController3] autorelease];
[arrControllers addObject:navViewController2];
[arrControllers addObject:navViewController3];
[AppDelegate.tabViewController setViewControllers:arrControllers];
此更改后工作正常。
我们遇到的唯一问题是,如果我们从阵列中释放所有对象,我们就会得到一个卡车。是因为,当您释放allObjects时,第一个作为RootViewController的控制器正在被释放?
由于