MBProgressHUD вызывает сбой приложения - PullRequest
1 голос
/ 02 июля 2010

Кажется, что использование MBProgressHUD вызывает сбой моего приложения.Без кода HUD следующее работает просто отлично, но с ним происходит сбой:

{

    ...

    HUD = [[MBProgressHUD alloc] initWithView:self.view];

    // Add HUD to screen
    [self.view addSubview:HUD];

    // Register for HUD callbacks so we can remove it from the window at the right time
    HUD.delegate = self;

    HUD.labelText = @"Connecting";

    // Show the HUD while the provided method executes in a new thread
    [HUD showWhileExecuting:@selector(runLocalNotificationHandler) onTarget:self withObject:nil animated:YES];  

[[self navigationController] popViewControllerAnimated:YES];
}

- (void) runLocalNotificationHandler
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

[self createLocalNotificationWithBug:[self tempBug]];

    [self performSelectorOnMainThread:@selector(finishedUpdatingNotifications) withObject:nil waitUntilDone:NO];

    [pool release];
}

- (void)finishedUpdatingNotifications
{

    [[self navigationController] popViewControllerAnimated:YES];
}

- (void)hudWasHidden {
    // Remove HUD from screen when the HUD was hidden
    [HUD removeFromSuperview];
    [HUD release];
}

Создается следующий отладочный вывод:

gdb) continue
2010-07-02 00:07:55.224 Bugger[16796:207] >>> Entering -[HomeViewController viewDidAppear:] <<<
2010-07-02 00:07:55.225 Bugger[16796:207] <<< Leaving -[HomeViewController viewDidAppear:] >>>
2010-07-02 00:07:55.224 Bugger[16796:7007] <<< Leaving -[BugDetailViewController runLocalNotificationHandler] >>>
2010-07-02 00:07:55.226 Bugger[16796:207] >>> Entering -[BugDetailViewController prepareToolbar] <<<
2010-07-02 00:07:55.227 Bugger[16796:207] <<< Leaving -[BugDetailViewController prepareToolbar] >>>
2010-07-02 00:07:55.229 Bugger[16796:207] >>> Entering -[BugDetailViewController dealloc] <<<
[Switching to process 16796]
2010-07-02 00:07:55.260 Bugger[16796:207] <<< Leaving -[BugDetailViewController dealloc] >>>
[Switching to process 16796]
Program received signal:  “EXC_BAD_ACCESS”.
(gdb) 

Что здесь происходит?

РЕДАКТИРОВАТЬ: Backtrace:

Program received signal:  “EXC_BAD_ACCESS”.
[Switching to process 23788]
(gdb) bt
#0  0x029b4a93 in objc_msgSend ()
#1  0x00000000 in ?? ()
(gdb) 

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

У меня была похожая проблема с этой комбинацией MBProgress и navigationController, по некоторым причинам похоже, что вы не можете вызывать действия контроллера навигации из вызова селектора, вы должны использовать события навигации только в основном потоке, надеюсь, это поможет.

0 голосов
/ 02 июля 2010

Так близко ....

введите bt<return> в ответ на запрос (gdb) и отправьте обратную трассировку.

Кроме того, я думаю, что ваш делегат - self в приведенном выше коде - освобождается и освобождается без предварительного удаления в качестве делегата из экземпляра MBProgressHUD. Делегаты, как правило, являются слабой ссылкой, и, как вы описываете, это определенно вызовет сбой. <Ч />

Ewwww ... ваш стек был растоптан! Я ненавижу, когда это происходит.

Вернуться к лучшему предположению; Ваш делегат освобождается перед тем, как быть удаленным из MBProgressHUD? ... вы запустили "Построить и проанализировать" свой код?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...