12

我正在尝试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.

有谁知道断言失败是为了什么以及如何解决。MBProgressHUD.m 文件包含在 Build Phases 选项卡下的 Compile Sources 中,并且文件中包含标题。正在将进度添加到处理字段验证的过程中。

4

2 回答 2

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 示例,您的问题将自行解决。

好起来。

于 2012-08-28T03:25:52.557 回答
1

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

我想当你创建MBProgressHUD

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

您的view导航控制器是nil,因此是问题所在。

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

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

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

要使其正常工作,您需要通过一个非nil view.

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

或者,将 HUD 添加为窗口的子视图。有关更多信息,您可以看到MBProgressHUD 未显示

希望有帮助。

于 2012-08-27T22:22:40.090 回答