Ich verstehe nicht, warum dies mir eine EXC_BAD_ACCESS gibt. Grundlegender Hintergrund, ich sammle und verarbeite einige Informationen und benutze dann eine modale Ansicht, um den Benutzer bestätigen zu lassen, ob er fortfahren möchte.Iphone UIAlertView wirft EXC_BAD_ACCESS. - Bearbeitet, nicht verursacht durch UIAlertView
Ich habe eine Schaltfläche in der Navigationsleiste namens continue, die meine Daten vorbereitete Funktion aufruft.
- (void)viewDidLoad {
//Other stuff
UIBarButtonItem *next = [[UIBarButtonItem alloc]
initWithTitle:@"Next"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(prepData)];
self.navigationItem.rightBarButtonItem = next;
[next release];
[super viewDidLoad];
}
prepDATA:
-(void)prepData{
/*
There's a bunch of stuff going on here, if "mensaje" is not an empty NSString, there is some kind of error that wont let me go on, if not, everything in the data is fine
*/
if(![mensaje isEqualToString:@""]){
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:nil
message:mensaje
delegate:nil
cancelButtonTitle:@"Aceptar"
otherButtonTitles:nil];
[alert show];
[alert release];
}else{
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:@"¿Esta seguro que desea realizar estas operaciones?"
delegate:self
cancelButtonTitle:@"Cancelar"
destructiveButtonTitle:@"Aceptar"
otherButtonTitles:nil];
[actionSheet showInView:self.view];
[actionSheet release];
}
}
Wenn ich debuggen, kann ich den ganzen Weg durch die prepDATA() erhalten, sobald ich weiter drücke ich ein EXC_BAD_ACCESS bekommen. Wenn ich die [actionSheet-Version] auskommentiere; Ich bekomme die Ausnahme nicht, aber es ist meines Wissens so, dass genau wie bei Alarmsichten Action-Sheets "bleiben", bis sie auftauchen.
Zumindest sagen alle Bücher, die ich gelesen habe, aber es ist durchaus möglich, dass ich etwas in der Autoreleasing nicht verstehe.
Nur als Referenz erscheint die Warnung ganz gut.
Hat jemand eine Idee, was hier los ist?
Danke, Stefano.
Bearbeiten: Es stellte sich heraus, dass der obige Code für Aktionen Blätter und Warnungsansichten in Ordnung ist, war das Problem, dass ich etwas veröffentlicht, das später versucht wurde, Autoreleased.
I for-Schleife haben, tut dies:
for(someConditions){
NSString *montoFormateado = [[[NSString alloc] initWithFormat:@"%.2lf",[monto doubleValue]] stringByReplacingOccurrencesOfString:@"." withString:@","];
[_postBuild setObject:[NSString stringWithString:montoFormateado] forKey:[NSString stringWithString:iidvar]];
[montoFormateado release];
}
postBuild = [_postBuild mutableCopy];
[_postBuild release];
Nun scheint es, die Fehler in der Tatsache, dass bei Einsatz von [NSString strintWithString: montoFormateado] Ich für Autofreigabe diese Zeichenfolge bis verließ später, aber wenn Ich habe _postBuild freigegeben, dass der String auch veröffentlicht wurde, ich habe das entfernt und einfach setObject: montoFormateado verwendet und es funktioniert gut.
Seine undichte Speicher, aber ich denke, das ist für eine andere Frage, die exc_bad_access wurde gelöst.
sehr kleine Sache, aber im Allgemeinen denke ich, es ist eine bessere Idee, [Super ViewDidLoad] vor dem Ausführen von Änderungen aufzurufen, nicht am Ende der Methode. Die einzige Zeit, die Sie [Super xxx] am Ende einer Methode setzen möchten, ist, wenn Sie dealloc aufrufen. – makdad
Danke für den Tipp, das ändern. Lass mich mit Zombies versuchen, um zu sehen, ob ich etwas bekomme. – blindstuff
Das Problem liegt höchstwahrscheinlich in dem Code, den Sie weggelassen haben - vielleicht wird Mensaje zu oft freigegeben (d. H. Eine automatisch freigegebene Zeichenfolge wird freigegeben). – Eiko