сбой при переключении между представлениями таблиц с помощью контроллера вкладок и MBProgressHUD - PullRequest
0 голосов
/ 03 августа 2010

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

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

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

EXC BAD ACCESS

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

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

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

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

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?

1 Ответ

0 голосов
/ 03 августа 2010

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

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

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

РЕДАКТИРОВАТЬ :Как вы упомянули в своем редактировании, было бы намного лучше, если бы вы инициировали HUD только один раз для каждого контроллера представления (например, в viewDidLoad) и вызывали showWhileExecuting каждый раз, когда вам это нужно (например, в viewWillAppear).

Но это все еще не объясняет сбой.

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

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

Последнее может вызвать ошибку EXC BAD ACCESS.

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

...