我遇到了一個問題,當有人點擊導航欄上的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