线程 1:单击按钮时发出 SIGABRT 信号

Posted

技术标签:

【中文标题】线程 1:单击按钮时发出 SIGABRT 信号【英文标题】:Thread 1: signal SIGABRT on button clicked 【发布时间】: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];


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

【问题讨论】:

【参考方案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。由于内部修饰期望将参数发送给方法。我的方法没有参数,因此失败了。

以上是关于线程 1:单击按钮时发出 SIGABRT 信号的主要内容,如果未能解决你的问题,请参考以下文章

线程 1:由于 XIB 中的未知类而发出信号 SIGABRT

线程 1:信号 SIGABRT Xcode 5.1

在AppDelegate类上发出SIGABRT信号

线程 1:信号 SIGABRT 错误应用程序崩溃

Android WebRTC 随机崩溃,致命信号 6 (SIGABRT)、tid 1191 (TimeCheckThread) 中的代码 -6 (SI_TKILL)、pid 656 (audioser

Xcode:“线程 1:信号 SIGABRT”