Pregunta

El siguiente código se encuentra en la tableView didSelectRowAtIndexPath si la liberación es sin comentar me sale el error:

ComicDetailsViewController * comicDetailsViewController = [[ComicDetailsViewController alloc] initWithNibName:@"ComicDetailsViewController" bundle:nil];
       comicDetailsViewController.comic = (Comic *)[arrayOfComics objectAtIndex:indexPath.row];
       comicDetailsViewController.bLoadPerformances = YES;
       [self.navigationController pushViewController:comicDetailsViewController animated:YES];
       //[comicDetailsViewController release];

El error no ocurre de inmediato, se sucede una vez que haga clic en el botón Atrás en el omicDetailsViewController.

ie.) I seleccione la fila tableview, la siguiente vista cargas y funciona correctamente. Una vez que he terminado con este punto de vista y haga clic en el botón de navegación hacia atrás el programa se bloquea y me da EXC_BAD_ACCESS. ¿Por qué es esto?

EDIT:

#0  0x9682b176 in __kill
#1  0x9682b168 in kill$UNIX2003
#2  0x968bd89d in raise
#3  0x968d39bc in abort
#4  0x968c2164 in szone_error
#5  0x968c21e7 in free_small_botch
#6  0x000a7877 in -[NSConcreteMutableData dealloc]
#7  0x00006433 in -[ComicDetailsViewController dealloc] at ComicDetailsViewController.m:376
#8  0x003cbcc7 in -[UINavigationController setDisappearingViewController:]
#9  0x003c9219 in -[UINavigationController _clearLastOperation]
#10 0x003c9b62 in -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:]
#11 0x0055224a in -[UINavigationTransitionView _notifyDelegateTransitionDidStopWithContext:]
#12 0x0055338a in -[UINavigationTransitionView _navigationTransitionDidStop]
#13 0x0034829d in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:]
#14 0x0034812f in -[UIViewAnimationState animationDidStop:finished:]
#15 0x0244ca28 in run_animation_callbacks
#16 0x0244c8e9 in CA::timer_callback
#17 0x02688d43 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__
#18 0x0268a384 in __CFRunLoopDoTimer
#19 0x025e6d09 in __CFRunLoopRun
#20 0x025e6280 in CFRunLoopRunSpecific
#21 0x025e61a1 in CFRunLoopRunInMode
#22 0x02f0c2c8 in GSEventRunModal
#23 0x02f0c38d in GSEventRun
#24 0x00326b58 in UIApplicationMain
#25 0x000020f4 in main at main.m:14

Editar 2:

Aquí está el bloque comicDetailsViewController dealloc:

- (void)dealloc {
[comic release];
[xmlParser release];
[webData release];
[currentPerformanceObject release];
[arrayOfPerformances release];
[soapResults release];
[btnPerformances release];
[super dealloc];

}

Línea 376 es la línea de liberación WebData

EDITAR 3:

    -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"ERROR with theConenction");
    [connection release];
    [webData release];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"DONE. Received Bytes: %d", [webData length]);

    if(xmlParser)
    {
        [xmlParser release];
    }

    xmlParser = [[NSXMLParser alloc] initWithData: webData];
    [xmlParser setDelegate: self];
    [xmlParser setShouldResolveExternalEntities: YES];
    [xmlParser parse];

    [connection release];
    [webData release];
}
¿Fue útil?

Solución

Por favor, nos muestran el seguimiento de la pila.

Pero mi suposición inicial es lo que están haciendo algo mal en - (void) dealloc de la clase ComicDetailsViewController.

Por favor, compruebe para algunas cosas

  • El bloque de dealloc está bien
  • No está liberando objeto comicDetailsViewController o una referencia a él desde otro lugar.

Espero que esto ayude.

Gracias, Madhup

Otros consejos

Antes de estallar la visión hacia fuera, cancelar su NSURLConnection enviando un mensaje de cancelación al objeto apropiado.

Asumiendo que su objeto es el nombre NSURLConnection asyncConnection:

-(void)viewWillDisappear:(BOOL)animated
   [asyncConnection cancel];
}

El problema sigue siendo, posiblemente, en su dealloc.

El hecho de que el objeto está en su @interface (archivo .h), eso no significa que pueda / tienen a dealloc la variable. He tenido este problema, así

archivo .h

@interface PeopleViewController : UITableViewController {
NSArray *people;
}

@property (nonatomic, retain) NSArray *people;

@end

archivo .m

@implementation PeopleViewController

@synthesize people;

- (void)viewDidLoad {
    people = [town.people allObjects];
}

...

- (void)dealloc {
    [people release];
}

@end

Yo no tenía necesidad de liberar a las personas porque no aumentó la cuenta de retención en el objeto mientras que en estaba en mi vista personalizada, liberando ésta durante el proceso de dealloc causado mis problemas.

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