2012-09-04 5 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]; 
} 

モーダルコントローラショーは完全にはなく却下警告を生成します。 は、このコントローラでは私はこのようなモーダルビューを作成します。 このコントローラにメソッドを却下です:

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

警告が生成された警告さ:ビューコントローラ< UINavigationControllerから却下する

試み:プレゼンテーションながら0x1ed91620>または解任が進行中です!

これについての手がかりは?私はこれが後半の答えであると認識多分、これは他の誰かがこの解決策を探しに役立つ

おかげ

+0

関連 - のhttp://のstackoverflow。 com/questions/1412021/iphone-crashing-when-presenting-modal-view-controller – ChrisF

答えて

28

が、ここで私がやったことです。私にとって

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

、私はそのラインを見つけましたコードが何度も呼び出されていたので、なぜこれが最も簡単な解決策だったのかを知ることができませんでした。

+6

私もこの問題に遭遇しました。モダールビューの[キャンセル]ボタンをタップして(直接的または間接的に)コールされたコールバック(IBAction)メソッドに、あなたの 'dimissModalViewControllerAnimated:'コールが置かれている可能性があります。したがって、この 'dismissModalViewControllerAnimated:'は重複している可能性があり、削除することができます。 – smileyborg

+1

私は同様の問題を抱えていましたが、viewControllerが表示されてすぐに解消されたため(現在のアニメーション中に解消されました)、 'isBeingPresented'をチェックしなければなりませんでした。 – Olie

+0

それは変です。私は@smileyborgが何かにあると思う。しかし、なぜそれが一見自動的に解雇されるのかわかりません。私がしたのは、アンワインドアクションだったので、それを直接却下する必要はありませんか? – huggie

14

私は正しい軌道に乗るためにありがとうJDx。 5人に1人の場合、私はまだエラーを参照してくださいねと言う -

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

は、私が信頼できないと、このアプローチを見つけた:私は、iOS 6で廃止された機能を使用せずに警告を削除します。このソリューションを形成するためにそれを適応しました。

私の解決策は、完了ブロックを使用して、閉じても安全かどうかを制御するフラグを設定することでした。つまり、ビューが破棄されているかどうかを確認する必要はありません。発生解任コードのビットで

-(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]; 
    } 
    : 
} 

プレストねえ、これ以上のエラーを! iOS6をターゲット

0

、これは私のために働いていたものです:

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

あなたのように却下方法の完了後、あなたがやりたいことができます。

-(IBAction)backToMap 
{ 
    [self dismissViewControllerAnimated:YES 
          completion:^{ 
           //Do something here 
          }]; 
} 
関連する問題