2012-08-27 8 views
11

Estoy tratando de usar el MBProgressHUD dentro de una aplicación. Recibo un error en el momento en que se agrega el HUD a la vista.Error de aserción con MBProgressHUD - La vista no debe ser nula

Este es el código que agrega la barra de progreso a la 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]; 

Los errores de aplicación con:

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

también

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

Y

Crash: View must not be nil. 

¿Alguien sabe cuál es el error de aserción es para y cómo resolver. El archivo MBProgressHUD.m se incluye en las Fuentes de compilación en la pestaña Fases de compilación y el encabezado incluido en el archivo. El progreso se agrega a un proceso para procesar la validación de campo.

Respuesta

16

Hola, aquí hay un consejo rápido sobre la pantalla del HUD.

primero, sin intentar voltearse aquí, pero asegúrese de que si está inicializando el HUD para un controlador de navegación, tiene una o cualquier otra cosa para el caso. Tenga en cuenta que cuanto más alto sea el HUD en su vista, mayor será la interacción que se deshabilitará y se cubrirá con la superposición de HUD (que generalmente es una buena opción).

así que por ejemplo si está en un controlador de vista básica, o un modal, etc.haga algo como esto:

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

tenga en cuenta que lo está agregando a la misma vista que lo inicializó.

También tenga en cuenta que puede meterlo en otros puntos de vista, así como: self.navigationcontroller.view, self.splitviewcontroller.view o mi favorito: self.splitviewcontroller.view.superview (para cubrir y desactivar ambos lados de la vista)

Creo que su problema se resolverá solo si sigue el ejemplo init con la vista correcta para su aplicación.

be well.

+0

ty. No estaba usando un NavController en este ejemplo, así que debería tener init solo desde la vista. – StuartM

+0

+ 1, la mejor respuesta ... – AppStore

1

¿Dónde se utiliza ese fragmento de código? Si proporciona otros detalles, podría ayudarlo. Mientras tanto, esperando por algunos detalles, puedo darte algunas pistas sobre tu problema.

supongo que cuando se crea la MBProgressHUD

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

la view para el dispositivo de navegación es nil y por lo tanto el problema.

Si se desplaza el código MBProgressHUD (MBProgressHUD.m) se puede ver que hay una comprobación de control de la siguiente manera:

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

por lo que el código se detiene, ya que no pasa el control.

Para que esto funcione debe pasar un no nilview.

Si ha creado una clase que amplía un UIViewController (por ejemplo) puede presentar el HUD en el método viewDidAppear. Allí está seguro de que se ha creado y mostrado el view para su controlador de vista.

O bien, agregue el HUD como una subvista de la ventana. Para obtener más información, puede ver MBProgressHUD not showing.

Espero que ayude.

Cuestiones relacionadas