使用MBProgressHUD断言失败 - 视图不能为零

时间:2012-08-27 21:35:07

标签: ios ios5 uiview uiviewcontroller mbprogresshud

我正在尝试在应用程序中使用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文件包含在Build Phases选项卡下的Compile Sources中,并包含在文件中。正在将进展添加到处理现场验证的过程中。

2 个答案:

答案 0 :(得分:17)

嗨,这是关于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示例使用正确的应用视图,您的问题就会自行解决。

好。

答案 1 :(得分:1)

您在哪里使用该代码段?如果您提供其他一些细节,我可以帮助您。同时,等待一些细节,我可以给你一些关于你问题的提示。

我想当你创建MBProgressHUD

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

导航控制器的viewnil因此问题。

如果您导航MBProgressHUD代码(MBProgressHUD.m),您可以看到有这样的控制检查:

NSAssert(view, @"View must not be nil.");

因此代码停止,因为它没有通过控件。

要使其正常工作,您需要传递非nil view

如果您创建了一个扩展UIViewController的类(例如),则可以使用viewDidAppear方法显示HUD。在那里,您确定已创建并显示视图控制器的view

或者,将HUD添加为窗口的子视图。有关详细信息,请参阅MBProgressHUD not showing

希望有所帮助。