2012-08-27 9 views
11

Ich versuche, die MBProgressHUD innerhalb einer Anwendung zu verwenden. Ich erhalte einen Fehler an dem Punkt, an dem das HUD zur Ansicht hinzugefügt wird.Assertionsfehler mit MBProgressHUD - View muss nicht Null sein

Dies ist der Code, der der Ansicht den Fortschrittsbalken hinzufügt.

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]; 

Die Anwendungsfehler mit:

*** Assertion failure in -[MBProgressHUD initWithView:], /Users/.../MBProgressHUD/MBProgressHUD.m:190 

Auch

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'View must not be nil.' 

Und

Crash: View must not be nil. 

Weiß jemand, was das Assertionsfehler für ist und wie zu lösen. Die Datei MBProgressHUD.m ist in den Kompilierquellen auf der Registerkarte "Phasen erstellen" enthalten und der Header ist in der Datei enthalten. Der Fortschritt wird einem Prozess zur Verarbeitung der Feldvalidierung hinzugefügt.

Antwort

16

Hallo hier ist ein schneller Tipp auf dem HUD-Display.

zuerst, nicht versuchen, hier zu flippen, aber stellen Sie sicher, dass, wenn Sie das HUD für einen Navigationscontroller initialisieren, dass Sie einen - oder etwas anderes für die Angelegenheit haben. Beachten Sie, je höher Sie das HUD in Ihrer Ansicht halten, desto mehr Interaktion wird deaktiviert und durch das HUD-Overlay abgedeckt (was normalerweise eine gute Sache ist).

so zum Beispiel, wenn Sie in einer Grundansicht Controller oder ein Modal, etc.so etwas tun:

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

beachten Sie, dass Sie es auf die gleiche Ansicht Sie es mit initialisiert hinzufügen.

auch beachten Sie, dass Sie es auch in anderen Ansichten stopfen können wie: self.navigationcontroller.view, self.splitviewcontroller.view oder mein Favorit: self.splitviewcontroller.view.superview (um beide Seiten der Ansicht abzudecken und zu deaktivieren).

Ich denke, Ihr Problem wird sich lösen, wenn Sie init Beispiel mit der richtigen Ansicht für Ihre App folgen.

gut sein.

+0

ty. Ich habe in diesem Beispiel keinen navController verwendet, daher sollte init nur von der Ansicht ausgehen. – StuartM

+0

+ 1, beste Antwort ... – AppStore

1

Wo verwenden Sie das Code-Snippet? Wenn Sie einige andere Details zur Verfügung stellen, könnte ich Ihnen helfen. Während ich auf einige Details warte, kann ich Ihnen einige Hinweise auf Ihr Problem geben.

Ich denke, dass, wenn Sie die

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

die view für Ihren Navigationscontroller MBProgressHUD erstellen ist nil und damit das Problem.

Wenn Sie den MBProgressHUD Code (MBProgressHUD.m) navigieren können Sie sehen, dass es eine Steuerprüfung ist wie folgt:

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

und so der Code stoppt, da er die Kontrolle nicht besteht.

Um dies zu ermöglichen, müssen Sie eine nicht nilview übergeben.

Wenn Sie eine Klasse erstellt haben, die eine UIViewController (zum Beispiel) erweitert, können Sie die HUD in viewDidAppear Methode darstellen. Dort sind Sie sicher, dass der view für Ihren View Controller erstellt und angezeigt wurde.

Alternativ fügen Sie das HUD als Unteransicht des Fensters hinzu. Für weitere Informationen können Sie MBProgressHUD not showing sehen.

Hoffe, dass hilft.

Verwandte Themen