В моем приложении у меня есть UITableViewController, который загружает вычисленные данные из моего основного хранилища данных. Это может занять некоторое время и привести к зависанию основного потока, поэтому для обеспечения визуальной обратной связи с пользователем я установил виджет MBProgressHUD, который будет отображать индикатор прогресса (просто вращающееся колесо), а метод расчета выполняется в отдельном потоке.
Это нормально, за исключением того, что пользователь все еще может выйти из UITableViewController, если он считает, что это занимает слишком много времени. Конечно, это хорошо, за исключением того, что когда отдельный поток завершает свою работу, он все еще пытается вызвать свой делегат (UITableViewController), чтобы скрыть MBProgressHUD. Это вызывает сбой, потому что, поскольку пользователь уже вышел из UITableViewController, у него есть dealloc
'd и release
' d.
MBProgressHUD имеет следующий код, чтобы попытаться остановить это:
if(delegate != nil && [delegate conformsToProtocol:@protocol(MBProgressHUDDelegate)]) {
if([delegate respondsToSelector:@selector(hudWasHidden)]) {
[delegate performSelector:@selector(hudWasHidden)];
}
}
Однако мое приложение почему-то по-прежнему работает с этим внутренним кодом ([delegate performSelector:@selector(hudWasHidden)]
), даже если UITableViewController полностью отсутствует, что приводит к сбою приложения.
Есть предложения? Я не бегу с NSZombiesEnabled
.