2010-12-28 5 views
0

Dies ist unten mein Code, wenn es an das Ende der Funktion, der Debugger löst einen Fehler EXC_BAD_ACCESS und wenn ich die Protokolle der Website überprüfen, wurde die URL nie besucht. Wenn jemand könnte mir dieses Problem zu beheben helfen, wäre es sehr zu schätzen:Versuchen, PHP-Skript auslösen, erhalten EXC_BAD_ACCESS

-(IBAction)submitEmail:(id)sender 
{ 
    NSString *urlStringRaw = [[NSString alloc] init]; 
    urlStringRaw = [NSString stringWithFormat:@"http://vedev.org/AnonMail/sendEmail.php?from=%@&to=%@&subject=%@&body=%@", from.text, to.text, subject.text, bodyContent.text]; 
    NSString *urlString = [urlStringRaw stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    [urlStringRaw release]; 
    NSURL * url = [NSURL URLWithString:urlString]; 
    [urlString release]; 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
    [url release]; 
    NSURLConnection *connection = [NSURLConnection connectionWithRequest:requestObj delegate:nil]; 
    [connection release]; 
    [requestObj release]; 
} 

Antwort

2

Ein EXC_BAD_ACCESS Signal bedeutet, dass Ihre Anwendung irgendwo einen Speicher-Management-Fehler aufweist. Es hat nichts mit der Serverseite zu tun. Dies ist nicht allzu überraschend, da der oben genannte Code zahlreiche Speicherverwaltungsfehler aufweist.

Sie sollten den statischen Analysator auf Ihrem Projekt ausführen - "Build and Analyze" in Xcode - und beheben Sie die Fehler, die es markiert. Lernen Sie auch die Standard-Cocoa-Speicherverwaltungsregeln kennen. Sie zeigen Ihnen genau, was Sie in dem von Ihnen geposteten Code (und anderem Code in Ihrer Anwendung) falsch machen.

Außerdem ist es wichtig zu verstehen, was Zeigervariablen tatsächlich sind - Referenzen auf Objekte, nicht die Objekte selbst. Zum Beispiel haben Sie dies geschrieben:

Warum dachten Sie, Sie müssten die erste Zeile schreiben, wie Sie es getan haben?

+0

Ich wollte eine Antwort posten, aber deine ist gut, also werde ich stattdessen kommentieren, für den OP. @Brennan, Sie müssen die Dokumentation zur Speicherverwaltung lesen. Sie erhalten Rückgabewerte von Methoden, die automatisch freigegebene Objekte zurückgeben ('-stringWithFormat:', '-stringByAddingPercentEscapesUsingEncoding:') und Sie rufen 'release' auf, so dass das Programm abstürzt. Der Static Analyzer sollte das aufgreifen, wie Chris sagt. – d11wtq