0

それで、これが取引です。私の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 回アクセスすることはできません。歯にアクセスすると、再コンパイルせずにそこに戻ることはできません。

4

2 に答える 2

1

objectForKey:NSDictionary方法です。teethであることを示す例外が発生していますNSArray。私はあなたが使いたいと思う

aTooth = [aPatient.teeth objectAtIndex:some-index];
于 2011-12-07T21:11:25.953 に答える