的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)];
原来坏的内存管理是罪魁祸首,感谢您的建议,但。 – 2009-06-30 14:47:11