私はなぜこれが私にEXC_BAD_ACCESSを与えているのか分かりません。基本的な背景、いくつかの情報を収集して処理し、次にモーダルビューを使用して、続行したいかどうかをユーザーに確認させる。Iphone UIAlertViewはEXC_BAD_ACCESSをスローします。 - 編集、UIAlertViewによって引き起こされない
私はナビゲーションバーにcontinueと呼ばれるボタンがあり、それは私のデータ準備機能を呼び出します。
- (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];
}
}
私はデバッグする場合、私はEXC_BAD_ACCESSを取得し続けるとすぐに私が押すと、)(prepDataを介してすべての方法を取得することができます。私が[actionSheet release]をコメントアウトすると、例外はありませんが、私の知る限りでは、警告表示のように、アクションシートは表示されるまで「スティック」しています。
少なくとも私が読んだ本はそれを述べていますが、私はオートレリースで何かを理解していない可能性が非常に高いです。
参考のため、アラートが表示されます。
誰もがここで何が起こっているか考えている?
ありがとう、ステファノ。
編集:アクションシートとアラートビューのための上記のコードはうまくいきました。問題は、後に自動リリースしようとしていたものをリリースしていたことでした。
私はこれを行うforループをしている:[:montoFormateado NSStringのstrintWithString]を、私は、後にautoreleaseため、その文字列を上に残していたが
今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];
、エラーが使用しているという事実にあったようです私は_postBuildをリリースしました。その文字列もリリースされました。私はそれを取り除き、setObject:montoFormateadoとそのうまく動作しました。
メモリが漏れていますが、私は別の質問のためにexc_bad_accessが解決したと思います。
非常に小さいものですが、一般的には、メソッドの最後ではなく変更を加える前に[super viewDidLoad]を呼び出す方が良いと思います。メソッドの最後に[super xxx]を入れたいときは、deallocを呼び出すときだけです。 – makdad
先端のためのThanx、それを変える。私が何かを得るかどうかを見るためにゾンビを試してみましょう。 – blindstuff
問題はおそらくあなたが放棄したコードにあります。おそらく、頻繁にmensajeがリリースされる(つまり、自動リリースされた文字列をリリースする)可能性があります。 – Eiko