【问题标题】:Log Out Controller crashes instead of allowing user to log out注销控制器崩溃而不是允许用户注销
【发布时间】:2014-02-06 14:42:18
【问题描述】:

我有一个自制的“注销控制器”用于我的应用程序,如果您遇到问题,我将不胜感激。

我的 “注销控制器” 包含在我的应用程序中,可通过从另一个控制器进行简单的侧滑访问;但是,我将 “注销” 按钮放在了一个简单的 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];
}

【问题讨论】:

  • 您需要提供异常的详细信息!显示异常名称、描述和堆栈跟踪。
  • 为什么要在 IBOutlet 上执行选择器
  • 它在哪里崩溃以及究竟有什么异常
  • 请提供崩溃日志..
  • 您正在通过在logOutAction: 中使用[self performSelector:@selector(logOutAction:) withObject:nil afterDelay:0.1]; 递归调用logOutAction: 方法。

标签: ios objective-c controller logout


【解决方案1】:

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

logOutAction: 方法中,您将使用[self performSelector:@selector(logOutAction:) withObject:nil afterDelay:0.1]; 设置未来的呼叫。然后,您将忽略该视图。因此,当在 0.1 秒内调用 logOutAction: 时,实例将不存在,您将崩溃。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 2018-06-08
    • 1970-01-01
    相关资源
    最近更新 更多