0

Я получаю сообщение об ошибке со следующим кодом. По сути приложение подтверждает вызов номера, когда он выбран из представления таблицы. EXC_BAD_ACCESS приходит, когда ViewContoller с этим предупреждением отклоняется.UIAlertView вызывает EXC_BAD_ACCESS

Это происходит только в случае срабатывания предупреждения. Это не так, если таблица просматривается без выбора. Это говорит мне, что я делаю что-то не так с этим UIAlertView. Вероятно, иметь дело с управлением памятью и выпускать что-то я не должен.

Куда я иду не так?

phoneAlert = [[[UIAlertView alloc] initWithTitle:locationName message:displayNumber delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Call",nil] autorelease]; 
    [phoneAlert show]; 
[tableView deselectRowAtIndexPath:indexPath animated:YES]; 


- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { 
    if (buttonIndex == 1) { 
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel://%@",dialNumber]]];  
    } 

} 

- (void)dealloc { 
    [locations release]; 
    [location release]; 
    [dialNumber release]; 
    [phoneAlert release]; 
     [super dealloc]; 
} 
+0

Повторяющийся вопрос: http://stackoverflow.com/questions/4212580/uialertview-exits-exc-bad-access-error/20058822#20058822 –

ответ

3

Вы назначаете phoneAlert к autoreleasedUIAlertView, который не удерживается экземпляр, потому что вы не используете точечный синтаксис или методу сеттера, вы делаете прямые задания.

Таким образом, если вы определили phoneAlert как свойство с retain ключевого слова, то вы должны сделать это, чтобы получить желаемый результат:

self.phoneAlert = ... 

или

[self setPhoneAlert:...]; 

В противном случае вы получите EXC_BAD_ACCESS в ваш метод dealloc, потому что вы видите вид предупреждения, поэтому экземпляр был освобожден пулом автозаполнения. Включите зомби в своем проекте, чтобы увидеть это в действии.

+0

Право, спасибо за помощь в этом. Я действительно вернулся и понял, что делаю это более сложным, чем это действительно нужно. Специально для просто сообщения подтверждения. Я должен делать это чаще. – TheHockeyGeek

Смежные вопросы