2012-08-27 12 views
11

Sto provando a utilizzare MBProgressHUD all'interno di un'applicazione. Sto ottenendo un errore nel punto in cui l'HUD viene aggiunto alla vista.Errore di asserzione con MBProgressHUD - La vista non deve essere nulla

Questo è il codice che aggiunge la barra di avanzamento alla vista.

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

Gli errori di applicazione con:

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

anche

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

E

Crash: View must not be nil. 

Qualcuno sa che il fallimento affermazione è e come risolvere. Il file MBProgressHUD.m è incluso nelle origini di compilazione nella scheda Fasi di creazione e nell'intestazione inclusa nel file. Il progresso viene aggiunto a un processo per l'elaborazione della convalida dei campi.

risposta

16

Ciao ecco un suggerimento rapido sul display HUD.

prima, non provate a capovolgere qui, ma assicuratevi che se state inizializzando l'HUD per un controller di navigazione, ne avete uno o qualsiasi altra cosa. Nota, più alto è l'HUD nella tua vista, maggiore è l'interazione che verrà disabilitata e coperta dalla sovrapposizione dell'HUD (che di solito è una buona cosa).

quindi ad esempio se si è in un controller di visualizzazione di base, o in modale, ecc.fare qualcosa del genere:

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

nota che lo si sta aggiungendo alla stessa vista con cui è stato inizializzato.

nota inoltre si può roba in altre viste così come: self.navigationcontroller.view, self.splitviewcontroller.view o il mio preferito: self.splitviewcontroller.view.superview (per coprire e disattivare entrambi i lati della vista).

Penso che il problema si risolverà da solo se segui l'esempio di init con la vista corretta per la tua app.

star bene.

+0

ty. In questo esempio non stavo usando un navController, quindi dovrei avere init dalla sola vista. – StuartM

+0

+ 1, la risposta migliore ... – AppStore

1

Dove si utilizza quello snippet di codice? Se fornisci altri dettagli, potrei aiutarti. Nel frattempo, in attesa di alcuni dettagli, posso darti alcuni suggerimenti sul tuo problema.

immagino che quando si crea il MBProgressHUD

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

la view per il controller di navigazione è nil e quindi il problema.

Se navigare il codice MBProgressHUD (MBProgressHUD.m) si può vedere che non v'è un controllo di controllo come questo:

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

e così il codice si ferma poiché non passa il controllo.

Per rendere questo funzionamento è necessario passare un non nilview.

Se è stata creata una classe che estende uno UIViewController (ad esempio) è possibile presentare l'HUD nel metodo viewDidAppear. Ci si è sicuri che il controller di visualizzazione view è stato creato e visualizzato.

In alternativa, aggiungere l'HUD come visualizzazione secondaria della finestra. Per ulteriori informazioni è possibile vedere MBProgressHUD not showing.

Spero che questo aiuti.

Problemi correlati