2012-01-16 2 views
0

Когда я нажимаю на кнопку Готово, которая имеет кодПрограмма получила сигнал EXC_BAD_ACCESS

UIBarButtonItem * button = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
                      target:self 
                     action:@selector(dismissView:)] autorelease]; 

self.navigationItem.rightBarButtonItem=UIBarButtonSystemItemDone; 
[[self navigationItem] setRightBarButtonItem:button]; 
[button release]; 

-(void)dismissView: (id)sender 

{ 

[self.navigationController popToRootViewControllerAnimated:YES]; 

} 

сбоев приложения и выдает сообщение Программа получила сигнал EXC_BAD_ACCESS

Есть идеи, что это неправильно.

Спасибо за помощь.

+0

Опубликовать обратную линию, или, по крайней мере, какая строка вызывает ошибку. – Kevin

+0

Трудно сказать без какого-либо другого контекста, но, похоже, вы можете дважды отпустить кнопку. Вы вызываете autorelease на нем, а затем вы также называете его выпуском. Так как вы не увеличили количество ссылок, но вызов остался одним из них. – mikeocool

ответ

2

Эта линия совершенно неправильно:

self.navigationItem.rightBarButtonItem=UIBarButtonSystemItemDone; 

Удалите его. После этого вы устанавливаете rightBarButtonItem, а также вы не можете установить rightBarButtonItem в UIBarButtonSystemItemDone - это просто не имеет никакого смысла.

О, и вы переопределяете button. Удалите также [button release];.

+0

А, хорошо поймать. Да, это вздор. –

+0

Спасибо mattjgalloway, что сообщение ушло, но теперь он не переходит в главное окно в соответствии с методом увольнения. В принципе ничего не происходит, когда нажата кнопка. – user1120133

+0

Вызывается ли ваш метод? Прикрепите 'NSLog' там, чтобы видеть. – mattjgalloway

1

Вы перевыпускаете свою кнопку. Вы автоматически регистрируете его при выделении/инициализации, а затем отпустите его снова, установив его как элемент навигации.

1

Вы перевыпускаете button. Его вызов +alloc в первой строке уже уравновешен -autorelease на той же строке - вам не нужно называть его после этого -release.

+0

Спасибо mattjgalloway, что сообщение ушло, но теперь он не переходит в главное окно в соответствии с методом увольнения. В принципе ничего не происходит, когда нажата кнопка. – user1120133

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