的UIBarButtonItem崩溃iphone应用程序按钮被点击

问题描述:

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"); 
} 

该代码是在其中被压入从NavigationViewController viewDidLoad方法的navigationController堆栈TableViewController的viewDidLoad方法。

我花了大概3小时试图得到这个工作,但无济于事。

像往常一样内存管理是罪魁祸首。从navigationController加载tableViewController:

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

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

释放设置为自动释放的对象......必须在内存管理中最常见的错误。 删除该行[tableController发行]解决了这个问题

如果指定@selector(refreshAction)当您创建按钮,即:

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

也许目标没有得到保存,如果你不也将操作指定为初始化所有的运气。

我不完全100%肯定,为什么你的代码不能正常工作,但在构造函数中选择直接设置没有问题:

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

原来坏的内存管理是罪魁祸首,感谢您的建议,但。 – 2009-06-30 14:47:11