我的英语不好,所以我的表情可能不清楚,抱歉。 我直接展示我的代码: appdelegate.m
Dly_navigationController* rootVC = nil;
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"loginFlag"] != nil) {
HS_HomeViewController* homeVC = [[HS_HomeViewController alloc] init];
rootVC = [[Dly_navigationController alloc] initWithRootViewController:homeVC];
}
else {
HS_LoginViewController* loginVC = [[HS_LoginViewController alloc] init];
rootVC = [[Dly_navigationController alloc] initWithRootViewController:loginVC];
}
self.window.rootViewController = rootVC;
我想在我的应用运行时登录。我这样做:
- (void)gotoLogin {
HS_LoginViewController *tmpLogin = [[HS_LoginViewController alloc] init];
Dly_navigationController* rootView = [[Dly_navigationController alloc] initWithRootViewController:tmpLogin];
AppDelegate *thisDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
[thisDelegate.window setRootViewController:rootView];
}
它运行良好,但旧的rootViewController和其他旧的VC不会发布。这给后续操作带来了不好的影响。例如,通知的事情。
感谢您阅读我的问题和我的英语。
答案 0 :(得分:0)
我的建议,只使用推送另一个视图控制器的单个导航控制器。
将LoginVC设置为导航根。然后在LoginVC的DidLoad
上,检查用户是否已登录。如果有效登录,则只需按下带有动画否的控制器。这样,用户将无法获得任何效果并直接转移到HomeVC。您可以使用validLogin
登录方法进行管理。在这里你可以推动动画。
在这种情况下,如果要从应用程序的任何位置注销,root将是LoginVC。
请根据您的需要维护NavigationBar
。
<强> AppDelegate.m 强>
HS_LoginViewController* loginVC = [[HS_LoginViewController alloc] init];
Dly_navigationController* rootVC = [[Dly_navigationController alloc] initWithRootViewController:loginVC];
self.window.rootViewController = rootVC;
登录页面
AppDelegate *thisDelegate;
- (void)viewDidLoad
{
thisDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"loginFlag"] != nil) {
HS_HomeViewController* homeVC = [[HS_HomeViewController alloc] init];
[thisDelegate.rootVC pushViewController:homeVC animated:false];
}
//... Your Code
}
- (void)validLogin
{
//Set your Login flag with defaults
HS_HomeViewController* homeVC = [[HS_HomeViewController alloc] init];
[thisDelegate.rootView pushViewController:homeVC animated:true];
}
希望,我的方案会帮助你。
感谢。
答案 1 :(得分:0)
在ARC中,当您将窗口的rootViewController分配给其他viewController时,没有对旧的rootViewController的强引用。 如果旧的rootViewController不是dealloc,那么可能存在强大的引用周期,所以我认为你应该检查你的HS_HomeViewController类的实现来找出这个问题。
答案 2 :(得分:0)
我认为代码中存在强大的参考周期,您可以使用分析工具找出问题所在。