2017-02-10 30 views
0

我跟随this answer跟踪我的应用程序EXC_BAD_ACCESS。是的,我有一个僵尸对象。当我试图找出我的代码的哪一行是错误的,我发现所有负责任的图书馆都是基金会。一个Objective-C消息被发送到一个释放的'NSThread'对象(僵尸),地址为:

Like this

当我试图做到这一点:

当您在任何保留/释放双击,仪器会告诉你这个地方进行的代码行。

它总是带我到汇编语言的一些代码。

[assembly language (maybe?)[3]

我不知道如何跟踪我的错误是这样的...

根据Elike的答案更新。

当我更新按钮的标题时,错误发生了。我使用计时器来每秒更新一个按钮标题。你可以点击按钮来启动/停止它。我使用dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(_auto_duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{});自动运行该方法300次(该错误在300次中随机发生)。

我所说的定时器这样 _startcounttimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(StartCountTimerMethod) userInfo:nil repeats:YES];

- (void)StartCountTimerMethod 
{ 
    _startcountbtnsec++; 
    NSString *secstring = [NSString stringWithFormat:@"%d", _startcountbtnsec]; 
    [_startbtn setTitle:secstring forState:UIControlStateNormal]; 
} 

并点击该按钮将调用此方法:

- (void)StartBtnClick:(UIButton *)btn 
{ 
    switch (btn.tag) { 
     case 0: 
      btn.tag = 1; 
      [_startbtn setTitle:@"0" forState:UIControlStateNormal]; 
      _startcountbtnsec = 0; 
      [self StartCountTimerStart]; 
      NSLog(@"Start!"); 
      break; 

     case 1: 
      btn.tag = 0; 
      [_startbtn setTitle:@"Start" forState:UIControlStateNormal]; 
      [self StartCountTimerStop]; 
      NSLog(@"Stop!"); 
      break; 

     default: 
      break; 
    } 
} 

我看不出任何问题,更新按钮文本...而僵尸对象是“NSThread”。有没有可能是错误是关于按钮和线程?

+0

这很难。请记住,坠机本身是诊断性的;实际的错误发生很久以前。所以,是的,在邮件发送给僵尸的时候,这不是你的代码。但是你的代码早些时候设置了这种情况。你需要尝试反向工作。 – matt

+0

那么,我遇到了类似的情况,我可以肯定地说,基础库没有问题。尝试运行静态分析器https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/debugging_with_xcode/chapters/static_analyzer.html(这不会解决问题,只是第一步)检查潜在的内存泄漏 –

+0

我已经运行了静态分析器,但没有潜在的内存泄漏... – Chien

回答

1

我觉得有时容易只是让僵尸在方案中的诊断:Break on EXC_BAD_ACCESS in XCode?

你的第一张截图看僵尸是很明显的,但我同意的实际输出是太普通。 我不知道你的应用是关于什么的,但我会寻找更新按钮文本的东西(基于通知?)。

+0

是的,我使用计时器来更新每秒按钮标题。你可以点击按钮来启动/停止它。我已经编辑了我的问题来查看_update文本_代码。也许我应该把它们放到主线程中? – Chien

+0

@Chien我不确定这是否是您的问题,但您应该始终在主线程上更新您的UI。 – halileohalilei

+0

是的。我只是不确定。如果我没有在主线程上更新UI,每次调用方法时都会崩溃。但它随机发生。 – Chien

相关问题