我正在尝试在应用程序中使用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中,并包含在文件中。正在将进展添加到处理现场验证的过程中。
答案 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];
导航控制器的view
为nil
因此问题。
如果您导航MBProgressHUD
代码(MBProgressHUD.m),您可以看到有这样的控制检查:
NSAssert(view, @"View must not be nil.");
因此代码停止,因为它没有通过控件。
要使其正常工作,您需要传递非nil
view
。
如果您创建了一个扩展UIViewController
的类(例如),则可以使用viewDidAppear
方法显示HUD。在那里,您确定已创建并显示视图控制器的view
。
或者,将HUD添加为窗口的子视图。有关详细信息,请参阅MBProgressHUD not showing。
希望有所帮助。