それで、これが取引です。私のxibには16個のボタンがあり、それぞれが次のコードでコントローラーにインスタンス化されています。
IBOutlet UIButton *left1;
IBOutlet UIButton *left2;
IBOutlet UIButton *left3;
IBOutlet UIButton *left4;
IBOutlet UIButton *left5;
IBOutlet UIButton *left6;
IBOutlet UIButton *left7;
IBOutlet UIButton *left8;
IBOutlet UIButton *right1;
IBOutlet UIButton *right2;
IBOutlet UIButton *right3;
IBOutlet UIButton *right4;
IBOutlet UIButton *right5;
IBOutlet UIButton *right6;
IBOutlet UIButton *right7;
IBOutlet UIButton *right8;
これらのいずれかが押されると、押されたボタンに応じてオブジェクトを含むビューがプッシュされます。これが私がそれをした方法です:
if (upperLower.selectedSegmentIndex == 0) {
if (sender == left1) {
aTooth = [aPatient.teeth objectForKey:@"11"];
} else if (sender == left2) {
aTooth = [aPatient.teeth objectForKey:@"12"];
} else if (sender == left3) {
aTooth = [aPatient.teeth objectForKey:@"13"];
} else if (sender == left4) {
aTooth = [aPatient.teeth objectForKey:@"14"];
} else if (sender == left5) {
aTooth = [aPatient.teeth objectForKey:@"15"];
} else if (sender == left6) {
aTooth = [aPatient.teeth objectForKey:@"16"];
} else if (sender == left7) {
aTooth = [aPatient.teeth objectForKey:@"17"];
} else if (sender == left8) {
aTooth = [aPatient.teeth objectForKey:@"18"];
} else if (sender == right1) {
aTooth = [aPatient.teeth objectForKey:@"21"];
} else if (sender == right2) {
aTooth = [aPatient.teeth objectForKey:@"22"];
} else if (sender == right3) {
aTooth = [aPatient.teeth objectForKey:@"23"];
} else if (sender == right4) {
aTooth = [aPatient.teeth objectForKey:@"24"];
} else if (sender == right5) {
aTooth = [aPatient.teeth objectForKey:@"25"];
} else if (sender == right6) {
aTooth = [aPatient.teeth objectForKey:@"26"];
} else if (sender == right7) {
aTooth = [aPatient.teeth objectForKey:@"27"];
} else if (sender == right8) {
aTooth = [aPatient.teeth objectForKey:@"28"];
}
}
else {
if (sender == left1) {
aTooth = [aPatient.teeth objectForKey:@"41"];
} else if (sender == left2) {
aTooth = [aPatient.teeth objectForKey:@"42"];
} else if (sender == left3) {
aTooth = [aPatient.teeth objectForKey:@"43"];
} else if (sender == left4) {
aTooth = [aPatient.teeth objectForKey:@"44"];
} else if (sender == left5) {
aTooth = [aPatient.teeth objectForKey:@"45"];
} else if (sender == left6) {
aTooth = [aPatient.teeth objectForKey:@"46"];
} else if (sender == left7) {
aTooth = [aPatient.teeth objectForKey:@"47"];
} else if (sender == left8) {
aTooth = [aPatient.teeth objectForKey:@"48"];
} else if (sender == right1) {
aTooth = [aPatient.teeth objectForKey:@"31"];
} else if (sender == right2) {
aTooth = [aPatient.teeth objectForKey:@"32"];
} else if (sender == right3) {
aTooth = [aPatient.teeth objectForKey:@"33"];
} else if (sender == right4) {
aTooth = [aPatient.teeth objectForKey:@"34"];
} else if (sender == right5) {
aTooth = [aPatient.teeth objectForKey:@"35"];
} else if (sender == right6) {
aTooth = [aPatient.teeth objectForKey:@"36"];
} else if (sender == right7) {
aTooth = [aPatient.teeth objectForKey:@"37"];
} else if (sender == right8) {
aTooth = [aPatient.teeth objectForKey:@"38"];
}
}
toothController.aTooth = aTooth;
toothController.aPatient = aPatient;
if (aTooth) {
[self.navigationController pushViewController:toothController animated:YES];
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Tooth not found" message:@"The patient doesn't have that tooth" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
[alert release];
}
[aTooth release];
ここでの問題は、left1、left2、または left3 を押すと完全に機能する理由がわからないことです。ここで left4 を押すとクラッシュしますが、例外 (NSCFArray 番号が認識されないセレクターが bralbal を送信) が発生する場合もあれば、例外が発生しない場合もあります。番号 11、12、13、および 14 のすべての歯が配列内に存在します。私は怠惰すぎて 36 個も作成できなかったので、それらだけを試しました。しかし、なぜ14番だけではうまくいかないのでしょうか?
私はこれを何時間も理解しようとしてきましたが、うまくいきませんでした。どんな助けも高く評価しました。
更新: (最後の更新は間違っていました) 歯の解析元の xml から歯番号 14 を削除し、歯番号 15 を追加しました。問題は歯番号 15 で持続し、正しいメッセージ (歯が存在しません) を表示します歯数14。
更新 2: [aTooth リリース] の後に「aTooth = nil」を追加したところ、15 の歯にアクセスできるようになりましたが、どの歯にも 2 回アクセスすることはできません。歯にアクセスすると、再コンパイルせずにそこに戻ることはできません。