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个小时试图让它工作,但没有用。
答案 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)];