2017-02-10 78 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

相關問題