我遇到了一个问题,当有人点击导航栏上的rightBarButtonItem并快速点击它,程序崩溃。可以理解的是,崩溃是因为新视图尚未完成加载,并且该按钮仍然可见,以便再次点击,因此它将尝试再次推送视图以使程序崩溃。我尝试了一些方法来尝试和防止这种情况,而我目前的实现有些作用,但我知道有更好的解决方案,或许是框架中内置的解决方案?什么是更有效的方法来防止两次行动?
- (void) loadView
{
[super loadView];
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]
initWithTitle:@"Members"
style:UIBarButtonItemStylePlain
target:self
action:@selector(showRoster)] autorelease];
}
-(void) showRoster {
if (seconds + 3 < [[NSDate date] timeIntervalSince1970]) { //This is where I am trying to prevent the button from being activated twice.
seconds = [[NSDate date] timeIntervalSince1970];
vcRoster = [[RosterDataViewController alloc] init];
vcRoster.rosterDataModel.group_id = self.tweetsByGroupIdModel.group_id;
[self.navigationController pushViewController:vcRoster animated:YES];
}
}
我也试过,但它没有做什么,我想它应该做的事。
if (!self.navigationController.isBeingPresented)
我试图解决这个问题,谷歌搜索我的方式来回答,但我还没有找到一个很好的解决这个问题。我知道上述不是一种很好的做事方式,我愿意接受任何改进建议,因为我对IOS世界非常陌生。预先感谢您的帮助。
我想我需要传递一些信息与选择,因为当我用你的代码,我得到这个错误。 - [TweetsByGroupIdViewController showRoster]:无法识别的选择器发送到实例0x3b5d20 – Caimen
是那个控制器上的方法?这是一个叫它的UIControl吗? –
是的,它在那个控制器上,我相信在我发布的代码中它是一个UIBarButtonItem。在我的代码中尝试时考虑了这一点。但是,它似乎没有看到发件人参数,因为我认为该参数没有被传递。 – Caimen