单击按钮时,UIBarButtonItem会崩溃iphone应用程序

时间:2009-06-30 12:51:49

标签: iphone uinavigationcontroller uinavigationbar uibarbuttonitem

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);点击按钮不会做任何事情,但它也不会崩溃。

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

此代码位于TableViewController的viewDidLoad方法中,该方法从NavigationViewController viewDidLoad方法推送到navigationController堆栈。

我花了大约3个小时试图让它工作,但没有用。

3 个答案:

答案 0 :(得分:1)

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

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

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

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

释放一个设置为autorelease的对象...必须是内存管理中最常见的错误。 删除该行[tableController release]解决了问题

答案 1 :(得分:0)

如果您在创建按钮时指定@selector(refreshAction),那就好了,例如:

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

如果您还没有为初始化程序指定操作,则可能无法保存目标。

答案 2 :(得分:0)

我并不完全确定您的代码无法正常工作,但直接在构造函数中设置选择器确实有效:

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