Extraña Exc Malo acceso al utilizar Init, PushViewController, Liberación. Cualquier cosa mal con este código?

StackOverflow https://stackoverflow.com/questions/3688667

Pregunta

Tal vez he estado buscando en esto por mucho tiempo;) Mi aplicación tiene un NavigationController y varios ViewControllers. Desde una de las ViewControllers dos niveles abajo (mainViewController), cargados desde el RootViewController, tengo el código de abajo. Después de la PushViewController a la dataViewController y la parte posterior (por ejemplo posterior del botón pulsado), la aplicación se bloquea.

El cargas dataViewController muy bien, pero cuando se pulsa el botón de retroceso de la navigationController, la aplicación se cierra con la excepción de objetos. Si quito:

[dataViewController release];

La aplicación funciona bien. Es extraño porque la dataViewController se init'ed en el mismo método. Algunas ideas?

- (void) locationPage 
{

    [[NSNotificationCenter defaultCenter] postNotificationName:@"NotifyRemoveMap" object:nil];
    MyAppDelegate *app = [[UIApplication sharedApplication] delegate];

    UINavigationController *navigation = app.navigationCantroller;
    [navigation popToRootViewControllerAnimated:NO];

    DataViewController *dataViewController = [[DataViewController alloc] initWithNibName:@"DataView" bundle:nil];
    [dataViewController setCategoryId:category];

    MyLanguage *lang = app.lang;
    Mylocation *location = [lang locationForCategoryId:category];

    dataViewController.title = location.name;
    NSArray *locationArray = [lang locations];

    dataViewController.locations = locationArray;
    [navigation pushViewController:dataViewController animated:YES];
    [dataViewController release]; //  With this removed, app doesn't crash
}
¿Fue útil?

Solución

ni siquiera han leído su mensaje. Si se trata de Exec-Bad-Access, tengo 2 palabras para usted:

Habilitar NSZombies.

Siga este enlace: (se explica todo lo que necesita saber para solucionar cualquier problema de acceso a malo)

de teléfono de la memoria de depuración con NSZombie e instrumentos

Saludos!

Otros consejos

Probablemente el problema surge cuando el dataViewController se metió y se intenta acceder a algo en él - ya continuación se suelta. Es posible comprobar la consola para obtener más detalles. - mejor aún, ejecute en modo de depuración (debug de configuración y se ejecuta con depurador)

Puede editar su pregunta a mostrar algo de código que se ejecuta con el botón de retroceso.

Usted habla de la liberación de dataViewController pero su código dice detailsViewController. ¿Se copia y pega incorrectamente o que el error?

Se debe tener en cuenta no usar app.navigationController pero self.navigationController. diseño más limpio. Menos dependencias en el delegado de la aplicación, que demasiado a menudo se utiliza como un frankensteinobject que sabe demasiado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top