2
UIBarButtonItem *rButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:NULL]; 

rButton.action = @selector(refreshAction); 
self.navigationItem.rightBarButtonItem = rButton; 
[rButton release]; 

Приведенный выше код работает отлично, чтобы создать кнопку и добавить его в панели навигации, но при нажатии на кнопку он выходит из строя приложение с EXC_BAD_ACCESS. Если я прокомментирую rButton.action = @selector (refreshAction); нажатие кнопки не будет делать ничего, кроме того, что это не сбой.UIBarButtonItem врезается iPhone приложение при нажатии на кнопку

- (void)refreshAction { 
    NSLog(@"refreshAction"); 
} 

Этот код в метод а TableViewController в viewDidLoad, который помещается в стек navigationController из метода NavigationViewController viewDidLoad.

Я потратил, вероятно, 3 часа, пытаясь заставить это работать, но безрезультатно.

ответ

1

Как обычно управление памятью был преступником. Загрузка tableViewController из navigationController:

 
NearbyTableViewController *tableController = [[[NearbyTableViewController alloc] initWithNibName:@"NearbyTableViewController" bundle:nil] autorelease]; 
self.nearbyTableController = tableController;

[self pushViewController:self.nearbyTableController animated:YES]; 
[tableController release]; 

отпуская объект установлен в autorelease ... должна быть наиболее распространенной ошибкой в ​​управлении памятью. Удаление этой строки [tableController release] решило проблему

0

Любая удача, если вы укажете @selector(refreshAction) при создании кнопки, т.е .:

UIBarButtonItem *rButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshAction)]; 

Может быть, цель не спастись, если не указать действие на инициализаторе.

0

Я точно не 100% уверен, почему ваш код не работает, но установив селектор непосредственно в конструкторе делает работу:

UIBarButtonItem *rButton = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh 
         target:self 
         action:@selector(refreshAction)]; 
+0

получилось плохое управление памятью было преступником, спасибо за ваше предложение. –