2012-09-04 48 views
19

我正在iOS 6上工作。 我的應用程序有一個標準的導航控制器,嵌入了一個CustomViewController。完美奇怪的警告解散模態視圖控制器

-(IBAction)presentModalList:(id)sender { 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    StationsListViewController *list = [storyboard instantiateViewControllerWithIdentifier:@"StationsListViewController"]; 
    [list setStationsData: [self.stationsData allValues]]; 
    [self presentModalViewController:list animated:YES]; 
} 

模態控制器節目但解聘生成一​​個警告: 在該控制器I創建模式視圖這樣。 的此控制器解僱方法是:生成

-(IBAction)backToMap 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

的警告警告:

嘗試從視圖控制器< UINavigationController的駁回:0x1ed91620>而呈現或駁回正在進行!

有關於此的任何線索?

感謝

+0

相關 - HTTP://計算器。 com/questions/1412021/iphone-crashing-when-presenting-modal-view-controller – ChrisF

回答

28

我意識到這是一個遲到的答案,但也許這將幫助別人尋找一個解決方案,這一點,這裏是我做過什麼:

-(IBAction)backToMap 
{ 
    if (![[self modalViewController] isBeingDismissed]) 
     [self dismissModalViewControllerAnimated:YES]; 
} 

對於我來說,我發現,線的代碼被多次調用,我找不到爲什麼這是最簡單的修復方法。

+6

我也遇到了這個問題。可能發生的情況是您的'dimissModalViewControllerAnimated:'調用可能放置在一個回調(IBAction)方法中,該方法通過點擊模態視圖上的取消按鈕(直接或間接)觸發 - 已經處理解除模態視圖。所以這個'dismissModalViewControllerAnimated:'可能是重複的,可以刪除。 – smileyborg

+1

我有一個類似的問題,但它是由一個viewController被呈現,然後幾乎立即被解僱(所以解僱是在目前的動畫)。所以我不得不檢查'isBeingPresented'。 – Olie

+0

這很奇怪。我認爲@smileyborg是一些東西。但我不明白爲什麼它會自動消失?我所做的只是放鬆行動,我不需要直接解僱它? – huggie

14

感謝JDx讓我走上正軌。我適應它形成這個解決方案,這將刪除警告,而不使用那些棄用iOS 6的功能:

-(IBAction)backToMap 
{ 
    if (![self.presentedViewController isBeingDismissed]) { 
     [self dismissViewControllerAnimated:YES completion:^{}]; 
    } 
} 
0

我發現這種方法是不可靠的 - 說五分之一的情況下,我仍然看到錯誤。

我的解決方案是使用完成塊設置一個標誌,控制是否安全解僱 - 這樣你就不需要檢查視圖是否被解僱。

-(IBAction)presentModalView:(id)sender { 
    : 
    self.canDismiss = NO; 
    [self presentViewController:aVC animated:YES completion:^{ 
     self.canDismiss = YES; 
    }]; 
    : 
} 

在代碼的位在解僱發生時,只檢查標誌:

-(void)dismisser { 
    : 
    if (self.canDismiss) { 
     [self dismissViewControllerAnimated:YES completion:nil]; 
    } 
    : 
} 

變戲法似的,沒有更多的錯誤!

0

瞄準iOS6的,這是對我工作:

if (![self.presentedViewController isBeingDismissed]) 
    [self.presentedViewController dismissViewControllerAnimated:YES 
                completion:nil]; 
0

你可以做任何你解僱法的完成情況作爲後想:

-(IBAction)backToMap 
{ 
    [self dismissViewControllerAnimated:YES 
          completion:^{ 
           //Do something here 
          }]; 
}