Ошибка утверждения с помощью 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, не показывающий.

Надеюсь, что это поможет.