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

这个码是其中被推到从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)];
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top