iphone - apple - ios caracteristicas
Advertencia extraña descartando controlador de vista modal (5)
Apuntando a iOS6, esto es lo que funcionó para mí:
if (![self.presentedViewController isBeingDismissed])
[self.presentedViewController dismissViewControllerAnimated:YES
completion:nil];
Estoy trabajando en iOS 6. Mi aplicación tiene un controlador de navegación estándar con un controlador personalizado incorporado. En este controlador creo una vista modal como esta:
-(IBAction)presentModalList:(id)sender {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
StationsListViewController *list = [storyboard instantiateViewControllerWithIdentifier:@"StationsListViewController"];
[list setStationsData: [self.stationsData allValues]];
[self presentModalViewController:list animated:YES];
}
El controlador modal se muestra a la perfección pero el despido genera una advertencia. El método de despido en este controlador es:
-(IBAction)backToMap
{
[self dismissModalViewControllerAnimated:YES];
}
La advertencia generada es Advertencia:
Intente descartar del controlador de vista <UINavigationController: 0x1ed91620> mientras se está realizando una presentación o un despido.
¿Alguna pista sobre eso?
Gracias
Encontré que este enfoque no es confiable; digamos que un caso de cada cinco todavía vería el error.
Mi solución fue utilizar el bloque de finalización para establecer una marca que controle si es seguro o no descartar, de esa manera no es necesario verificar si la vista se está descartando o no.
-(IBAction)presentModalView:(id)sender {
:
self.canDismiss = NO;
[self presentViewController:aVC animated:YES completion:^{
self.canDismiss = YES;
}];
:
}
En el bit de código donde se produce el despido, simplemente marque la bandera:
-(void)dismisser {
:
if (self.canDismiss) {
[self dismissViewControllerAnimated:YES completion:nil];
}
:
}
Hey presto, no más errores!
Gracias JDx por ponerme en el camino correcto. Lo adapté para formar esta solución, que eliminará la advertencia sin usar funciones que están en desuso en iOS 6:
-(IBAction)backToMap
{
if (![self.presentedViewController isBeingDismissed]) {
[self dismissViewControllerAnimated:YES completion:^{}];
}
}
Me doy cuenta de que esta es una respuesta tardía, pero tal vez esto ayude a alguien más a buscar una solución a esto, aquí está lo que hice:
-(IBAction)backToMap
{
if (![[self modalViewController] isBeingDismissed])
[self dismissModalViewControllerAnimated:YES];
}
Para mí, descubrí que la línea de código se llamaba varias veces, no podía descubrir por qué esta era la solución más fácil.
Puede hacer lo que quiera después de completar el método de despido como:
-(IBAction)backToMap
{
[self dismissViewControllerAnimated:YES
completion:^{
//Do something here
}];
}