2015-11-29 3 views
0

Я пытаюсь выяснить, что не так с моим приложением. Он отключает EXC_BAD_ACCESS в режиме деблокирования, но когда я пытаюсь проверить зомби, он не падает с помощью инструментов. В обязательном порядке я отключу обнаружение зомби, и он сработает.Приложение аварийно завершает работу в режиме освобождения, но не сбой при включении зомби

Когда это происходит, единственное, что я могу сказать, это то, что самый последний вызов в распределении vm показывает этот viewDidLoad. Так что мне интересно, что здесь что-то не так?

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 

    //load abstract 
    if (self.abstractId > 0){ 
     [self startQuery:@selector(getAbstractWithId:)]; 
    } 

    //setup nav bar 
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]; 
    [self.view addSubview:[self makeFavoriteButton]]; 


    //add link attributes 
    self.linkAttributes = @{NSForegroundColorAttributeName: [UIColor colorWithHexString:emaGreen], 
          NSUnderlineColorAttributeName: [UIColor lightGrayColor], 
          NSUnderlineStyleAttributeName: @(NSUnderlinePatternSolid)}; 


    //create text view 
    UITextView *tv = [[UITextView alloc] initWithFrame:self.view.frame]; 
    tv.editable = NO; 
    tv.textAlignment = NSTextAlignmentLeft; 
    tv.text = @" "; 
    tv.backgroundColor = [UIColor whiteColor]; 
    tv.scrollEnabled = YES; 
    tv.dataDetectorTypes = UIDataDetectorTypeLink; 
    tv.linkTextAttributes = self.linkAttributes; // customizes the appearance of links 
    tv.delegate = self; 

    // set the scroll indicators between nav and tabs 
    tv.scrollIndicatorInsets = UIEdgeInsetsMake(0, 
               0, 
               CGRectGetHeight(self.tabBarController.tabBar.frame), 
               0); 

    //add to property and view 
    self.tv = tv; 
    [self.view addSubview:tv]; 

    //Create spinner view 
    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES]; 
    hud.mode = MBProgressHUDModeIndeterminate; 
    self.hud = hud; 

} 

Какие еще варианты отладки у меня есть?

Спасибо!

+0

Вы можете попробовать контрольные точки, чтобы увидеть, какая линия рушится. – ruthless

+0

Вы проверили схему, чтобы убедиться, что сборка «Инструменты» и сборка выпуска построены таким же образом? – matt

+1

Когда вы включаете зомби, все дело в том, что приложение больше не будет разбиваться. Вместо этого вы должны увидеть некоторый вывод в консоли отладки, когда вы попытаетесь сделать плохой доступ к памяти. Ищите эти сообщения при отладке с включенными зомби. – rmaddy

ответ

0

Спасибо за комментарии. Как ни странно, я, наконец, получил консольный вывод в зомби со следующей ошибкой KVO message received but not handled. Который я смог отследить наблюдателя, который не был удален при dealloc'd. Худшая ошибка. тьфу. Спасибо за помощь!

-(void)dealloc 
{ 
    [self.queryQueue removeObserver:self forKeyPath:@"operations"]; 
} 
1

Я собираюсь предположить, что это эта линия:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];

Процитируем документацию для параметров UIControl:

цель: Целевой объект-то есть объект на которое отправлено сообщение о действии. Если это нуль, цепочка ответчиков ищет объект, желающий ответить на сообщение о действии

Действие: Селектор, идентифицирующий сообщение о действии. Это не может быть NULL

Как ни странно, это не указано для UIBarButtonItem «s инициализатора, но я не вижу причин, почему это не должно быть верно там, а также, если этот класс фактически не проверяет эти параметры для null и ведет себя соответственно ,

Возможно, ваш элемент кнопки бара пытается получить доступ к селектору null для его отправки и сбой там или пытается отправить его на какой-либо объект, который уже был выпущен. Это может быть вызвано только некоторой оптимизацией - например, возможно, в режиме выпуска кнопка захватывает указатель на функцию, которая будет вызываться отправкой сообщения вместо отправки сообщения в качестве оптимизации.

По крайней мере, минус nil похоже похоже ошибка.

+0

спасибо, но это не решило проблему. Хотя я выполнил действие заглушки, чтобы обработать нуль. – 4m1r

Смежные вопросы