2014-01-17 71 views
-1

我有一个自制的“注销控制器”为我的应用程序,我将不胜感激您对问题的帮助。注销控制器崩溃,而不是允许用户注销

我的“注销控制器”包含我的应用程序,通过从另一个控制器的简单侧滑动访问;不过,我已将“注销”按钮置于简单的UITableViewController中。

当我点击“注销”按钮时,应用程序崩溃,我不确定如何解析数据,以便用户在按下按钮后成功注销。如果有人能告诉我我哪里出错了,那将是救命!

- (IBAction)logOutAction:(id)sender { 

    NSLog(@"yes"); 

    PDKeychainBindings *bindings = [PDKeychainBindings sharedKeychainBindings]; 
    [bindings setObject:@"no" forKey:@"loggedIn"]; 
    [bindings setObject:@"" forKey:@"userID"]; 

    UIWindow *window = [[UIApplication sharedApplication] keyWindow]; 
    UINavigationController *nav = (UINavigationController*)window.rootViewController; 
    UIViewController *login = [nav.viewControllers objectAtIndex:0]; 
    UINavigationController *slider = (UINavigationController*)login.presentedViewController; 

    self.logOutButton.enabled = NO; 
    [self.logOutButton setAlpha:0.8]; 

    [self performSelector:@selector(logOutAction:) withObject:nil afterDelay:0.1]; 
    [self setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
    [login dismissViewControllerAnimated:YES completion:^{ 

    }]; 
} 


- (IBAction)close:(id)sender { 

    //UIWindow *window = [[UIApplication sharedApplication] keyWindow]; 
    //DYNavigationController *nav = (DYNavigationController*)window.rootViewController; 
    //UIViewController *login = [nav.viewControllerStack objectAtIndex:0]; 
    // CustomNavController *slider = (CustomNavController*)login.presentedViewController; 
    //[self setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
    //[login dismissViewControllerAnimated:YES completion:^{  
    // }]; 

    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
+0

您需要提供例外的详细信息!显示异常名称,描述和堆栈跟踪。 – Wain

+1

为什么你正在执行IBOutlet上的选择器 – Retro

+0

哪里崩溃,什么是 –

回答

1

您没有提供异常详细信息,但它看起来像是您在调用实例后被释放。

logOutAction:方法中,您正在使用[self performSelector:@selector(logOutAction:) withObject:nil afterDelay:0.1];设置未来呼叫。然后你就会放弃这个观点。因此,当在0.1秒内被调用时,该实例不存在,并且您将崩溃。

在这里使用performSelector是没有意义的 - 删除它。