【问题标题】:Thread 1: signal SIGABRT on button clicked线程 1:单击按钮时发出 SIGABRT 信号
【发布时间】:2014-11-17 20:09:57
【问题描述】:

我正在我的项目中实现一个注销按钮。 我通过使用 touch up inside 事件来附加它。单击注销时,用户被重定向到登录视图控制器,但由于某种奇怪的原因,应用程序在几秒钟后因以下错误而死亡。线程 1:信号 SIGABRT。

单击注销:(此方法所做的只是删除用户名并重定向到“登录”视图控制器)

-(IBAction)logout {

[[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"User"];

[self dismissViewControllerAnimated:NO completion:nil];

UIViewController * vc = [self.storyboard instantiateViewControllerWithIdentifier:@"Login"];
[self presentViewController:vc animated:NO completion:nil];

}

登录页面加载时什么都没有。

【问题讨论】:

    标签: ios objective-c xcode5


    【解决方案1】:

    您的注销签名完全错误。您应该将消息行更改为:

    -(IBAction) logout:(id) sender {
    

    如果你愿意,你可以忽略发件人。您的内部修饰期望向具有参数的方法发送消息,而您的方法没有。这就是你崩溃的原因。

    【讨论】:

    • 谢谢。你的回答很有帮助。
    【解决方案2】:

    尝试使用以下代码更改您的代码:

    -(IBAction)logout {
    
        [[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"User"];
    
        [self dismissViewControllerAnimated:NO completion:^{
            UIViewController * vc = [self.storyboard instantiateViewControllerWithIdentifier:@"Login"];
            [self presentViewController:vc animated:NO completion:nil];
        }];
    
    }
    

    您可能在旧视图控制器被解除之前显示新视图控制器,即使您这样做没有动画。

    【讨论】:

    • 问题正如欧文所说。我必须添加 :(id)sender。由于内部修饰期望将参数发送给方法。我的方法没有参数,因此失败了。
    猜你喜欢
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    相关资源
    最近更新 更多