0

Der folgende Code in der Tableview DidSelectRowAtIndexPath ist, wenn die Entlassungs unkommentiert ist i den Fehler:Freigabe nach Ansicht auf Navigationsstapel schieben gibt mir EXC_BAD_ACCESS Fehler

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

Der Fehler nicht sofort passieren, passiert es einmal Ich klicke auf die Schaltfläche Zurück in der OmicDetailsViewController.

dh.) Ich wähle die Zeile der Tabellenansicht, die nächste Ansicht lädt und funktioniert ordnungsgemäß. Sobald ich mit dieser Ansicht fertig bin und auf die Zurück-Navigationsschaltfläche klicke, stürzt das Programm ab und gibt mir exc_bad_access. Warum ist das?

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 

Edit 2:

Hier ist der comicDetailsViewController dealloc Block:

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

}

Linie 376 ist die webdata Freigabeleitung

EDIT 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]; 
} 
+0

Zeigen Sie eine Stapelverfolgung an. –

+0

hmm, Text kommt komisch rein. meinst du das mit Stack-Trace? – Mausimo

+0

Bitte zeigen Sie, was Sie tun, Zeile 376 in Ihrer 'ComicDetailsViewController' Klasse –

Antwort

1

Bitte zeigen Sie uns die Stack-Trace.

Aber meine erste Vermutung ist, dass Sie etwas falsch in - (void) dealloc Ihrer ComicDetailsViewController Klasse tun.

Bitte überprüfen Sie für einige Dinge

  • Ihr dealloc Block ist in Ordnung
  • Sie nicht comicDetailsViewController Objekt oder einen Verweis auf sie von woanders veröffentlichen.

Hoffe das hilft.

Danke, Madhup

+0

Zeile 376 ist in meiner Bearbeitung der ursprünglichen Frage, es ist Teil des Dealloc-Block – Mausimo

+0

Bitte überprüfen Sie über Webdata, es ist etwas falsch damit. Drücken Sie während eines Netzwerkanrufs zurück und versuchen Sie, das Ergebnis in webdata zu speichern? Vermutlich machst du etwas anderes. –

+0

Sie haben recht, ich führe eine asynchrone NSURLConnection, jedoch laut Code wurde die didFinishConnection bereits ausgeführt und die NSXMLParser delegiert. Ich bin mir nicht sicher, warum die WebData immer noch verwendet werden würde ... – Mausimo

0

Vor den Blick aus knallen, stornieren NSURLConnection durch eine an das entsprechende Objekt Löschungsnachricht senden.

Vorausgesetzt, dass Ihr NSURLConnection Objekt asyncConnection genannt:

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

Ich fügte hinzu, es stürzt auf der Cancel-Zeile exc_bad_access ab. – Mausimo

+0

Ich gebe die Verbindung frei, wenn ich im didFailWithError-Delegaten und im connectionDidFinishLoading-Ereignis bin. – Mausimo

+0

Ich habe den Verbindungsdelegiertencode hinzugefügt – Mausimo

0

Das Problem in Ihrem dealloc noch möglicherweise ist.

Nur weil das Objekt in Ihrer @interface (.h-Datei) ist, bedeutet das nicht, dass Sie die Variable freigeben können/müssen. Ich hatte dieses Problem auch

.h-Datei

@interface PeopleViewController : UITableViewController { 
NSArray *people; 
} 

@property (nonatomic, retain) NSArray *people; 

@end 

.m-Datei

@implementation PeopleViewController 

@synthesize people; 

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

... 

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

@end 

ich die Leute nicht zu lösen brauchte, weil ich nicht die Zählung auf dem Objekt behalten erhöhen, während in meiner benutzerdefinierten Ansicht war, daher ist es während des dealloc Prozesses Freigabe verursachte meine Probleme.

Verwandte Themen