Ошибка утверждения с помощью MBProgressHUD - вид не должен быть nil
Я пытаюсь использовать MBProgressHUD
в приложении. Я получаю ошибку в точке, где HUD добавляется в представление.
Это код, который добавляет индикатор выполнения в представление.
HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
[self.view.window addSubview:HUD];
// Set determinate mode
HUD.mode = MBProgressHUDModeAnnularDeterminate;
HUD.labelText = @"Loading";
// myProgressTask uses the HUD instance to update progress
[HUD showWhileExecuting:@selector(processFieldEntries) onTarget:self withObject:nil animated:YES];
Ошибки приложения:
*** Assertion failure in -[MBProgressHUD initWithView:], /Users/.../MBProgressHUD/MBProgressHUD.m:190
Кроме
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'View must not be nil.'
и
Crash: View must not be nil.
Кто-нибудь знает, для чего и как разрешено утверждение Assertion. Файл MBProgressHUD.m включен в источники компиляции на вкладке "Сборка фаз" и заголовок, включенный в файл. Прогресс добавляется в процесс обработки проверки поля.
Ответы
Ответ 1
Привет, вот быстрый совет на дисплее HUD.
во-первых, не пытайтесь перевернуть здесь, но убедитесь, что если вы инициализируете HUD для контроллера навигации, у вас есть одно - или что-то еще в этом отношении. Обратите внимание: чем выше вы придерживаетесь HUD в своем представлении, тем больше взаимодействия будет отключено и покрыто наложением HUD (что обычно хорошо).
например, если ваш в основном контроллере представления или модальном и т.д. сделать что-то вроде этого:
HUD = [[MBProgressHUD alloc] initWithView:self.view];
[self.view addSubview:HUD];
обратите внимание, что вы добавляете его в тот же вид, с которого вы его инициализировали.
также обратите внимание, что вы можете набивать его и в других представлениях:
self.navigationcontroller.view, self.splitviewcontroller.view или мой любимый: self.splitviewcontroller.view.superview(для охвата и отключения обеих сторон представления).
Я думаю, что ваша проблема будет решена сама собой, если вы последуете примеру init с правильным представлением для своего приложения.
хорошо.
Ответ 2
Где вы используете этот фрагмент кода? Если вы предоставите некоторые другие детали, я могу вам помочь. Тем временем, ожидая некоторых деталей, я могу дать вам несколько советов по вашей проблеме.
Я предполагаю, что при создании MBProgressHUD
HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
view
для вашего контроллера навигации nil
и, следовательно, проблема.
Если вы перемещаете код MBProgressHUD
(MBProgressHUD.m), вы можете увидеть, что существует контрольная проверка:
NSAssert(view, @"View must not be nil.");
и поэтому код останавливается, так как он не передает управление.
Чтобы выполнить эту работу, вам необходимо передать не nil
view
.
Если вы создали класс, который расширяет UIViewController
(например), вы можете представить метод HUD в viewDidAppear
. Там вы уверены, что был создан и отображен view
для вашего контроллера вида.
В качестве альтернативы добавьте HUD в качестве подсмотра окна. Для получения дополнительной информации вы можете увидеть MBProgressHUD, не показывающий.
Надеюсь, что это поможет.