2010-08-03 1 views
0

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

Я использую MBProgressHUD, чтобы можно было быстро переключаться между вкладками, когда я вытаскиваю источник данных tableview из Интернета с помощью Objective Resource, и это может занять немного. Поэтому я запускаю индикатор хода HUD, ожидающий загрузки данных.

Это, в свою очередь, позволило мне быстро переключаться между вкладками. Но .... Если бы я сделать это достаточно быстро возникает исключение

EXC BAD ДОСТУПА

с NSZombiesEnabled я получаю это: 2010-08-02 22: 44: 43,116 Film Fest [962: 8703] * ** - [Выпуск MBProgressHUD]: сообщение, отправленное на освобожденный экземпляр 0x85490b0

В обоих моих табличных представлениях я использую два разных пользовательских tableviewcells.

Каким должен быть мой следующий шаг, чтобы отладить это?

... поэтому я переместил код, чтобы создать HUD из моего viewWillAppear: метод viewDidLoad: и авария исчезла. // ИЛС будет dispable всех входных данных на представлении (используйте higest вида возможный в иерархии представлений)

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

    //HUD.graceTime = 0.5; 
    //HUD.minShowTime = 5.0; 

    // 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; 

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

однако это не реально исправить мою проблему, как viewDidLoad происходит только один раз в долгое время, особенно с новая многозадачность. Мне нужен этот HUD для запуска селектора каждый раз, когда появляется табличное представление.

Почему это неправильно для меня, чтобы это происходило в viewWillAppear ... это потому, что это может быть загружено так много, и я просто продолжал выделять объект? perhasp я должен выделить в viewDidload и огонь

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

только в моем viewWillAppear :?

Thoughts? 
+0

Я добавил несколько новых результатов на этот вопрос. – theprojectabot

ответ

0

Найти все места, где вы INIT/сохраняющие/выпуск/autorelease экземпляр MBProgressHUD.

NSZombie сообщает, что этот проект получает сообщение release после того, как он уже освобожден (значение сохранения равно нулю).

Это поможет, если вы будете размещать код - в противном случае это слишком сложно, чтобы помочь вам ...

EDIT:
Как уже упоминалось в вашем редактирования, было бы гораздо лучше, если вы 'd инициировать HUD только один раз для контроллера представления (например, в viewDidLoad) и вызывать showWhileExecuting каждый раз, когда вам это нужно (например, в viewWillAppear).

Но это все еще не объясняет крушение.

Вы выполняете весь код, который вы опубликовали (как есть) несколько раз из того же экземпляра контроллера вида, тогда вы должны иметь утечку памяти. Это потому, что я не вижу, где вы выпускаете старый экземпляр HUD.

Кроме того, вы лучше установить delegate ИЛС быть nil прямо перед выпуском его и перед вызовом [super dealloc]; в dealloc методе контроллера представления.

Последнее, что может привести к ошибке EXC BAD ACCESS.

Еще одна вещь, если весь код, который вы опубликовали, выполнен более одного раза, вы также должны иметь несколько видов HUD под номером self.view.
Я не знаю, что делает HUD в фоновом режиме - возможно, это вызывает ошибку ...

+0

Я отредактировал свой ответ. Посмотрите, помогает ли это. –

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