Итак, вот в чем дело. У меня есть 16 кнопок в моем xib, каждая из которых находится в своем контроллере со следующим кодом:
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];
Теперь проблема в том, что я не могу понять, почему, если я нажимаю влево1, влево2 или влево3, все работает отлично. Теперь, если я нажимаю влево4, он вылетает, иногда с исключением (номер NSCFArray, нераспознанный селектор, отправленный blalbal), а иногда и без него. Все зубы с номерами 11, 12, 13 и 14 существуют в массиве. Я пробовал только их, так как мне было лень создавать 36 из них. Но почему это не работает только для числа 14?
Я пытался понять это в течение нескольких часов безуспешно. Любая помощь приветствуется.
ОБНОВЛЕНИЕ: (последнее обновление было неправильным) Я удалил зуб номер 14 из xml, из которого анализируются зубы, и добавил зуб номер 15. Проблема сохраняется с зубами номер 15 и показывает правильное сообщение (зуб не существует) для зуб номер 14.
ОБНОВЛЕНИЕ 2: я добавил «aTooth = nil» после [релиза aTooth], и теперь я могу получить доступ к зубам 15, но я не могу получить доступ ни к одному зубу дважды. Как только я получил доступ к зубу, я не могу вернуться туда без перекомпиляции.