2016-04-30 6 views
0

「レートアプリ」アラートを作成したいのですが、何らかの理由でそれを表示する前に割り当てを解除します。UIAlertControllerはプレゼンテーションの前に割り当て解除されます

は、ここでは、コードです:

func showAlert() { 
    if #available(iOS 8.0, *) 
    { 
     let alertController = UIAlertController(title: "Rate App", message: "Rate this app now", preferredStyle: .Alert) 
     let neverAction = UIAlertAction(title: "Never Show This Again", style: .Destructive, handler: { (action: UIAlertAction) in 
      self.userDefaults.setBool(true, forKey: "rateAlertRejected") 
     }) 
     let rateAction = UIAlertAction(title: "Rate Now", style: .Default, handler: { (action: UIAlertAction) in 
      // Rate App 
     }) 
     let remindAction = UIAlertAction(title: "Remind Me Later", style: .Cancel, handler: nil) 

     alertController.addAction(rateAction) 
     alertController.addAction(neverAction) 
     alertController.addAction(remindAction) 

     presentViewController(alertController, animated: true, completion: nil) 
    } 
    else 
    { 
     // Identical code (using UIAlertView) for iOS 7 which works perfectly 
    } 
} 

メソッドが実行(特定の条件ではなく、テスト目的のためにそれが毎回ん)カスタムアンワインドセグエ後。

なぜこの問題がありますか?以前はUIAlertControllerを使っていましたが、問題はありませんでした。

+0

ここから 'showAlert'関数を呼び出していますか? – Shubhank

+0

カスタムunwind segueの後に実行するメソッドで。メソッドは他のものも同様に行い、完全に機能します。 – Lawrence413

答えて

1

あなたのコメントによると、あなたが でカスタムアンワインドセグエの後に実行される方法をshowAlertを示しました。

アンワインドセグエは、ビューheriarchyを閉じるため、アラート から表示するようにビューコントローラへの参照を取得しません。

これを解決するには、アンワインドするViewコントローラでアラートを表示するか、解除する前にアラートコントローラの処理が完了するまで待ちます。

+0

私はそれを私が巻き戻すビューコントローラに表示しています。基本的に私はVC1とVC2を持っています。 VC1にはunwindメソッドがあります(カスタムunwind seguesに必要です)。このメソッドは、ユーザーがVC2からVC1に移動すると実行されます。 'showAlert()'はunwindメソッド内にあります。 VC2からVC1に戻り、警告を表示したい。その場合には – Lawrence413

+0

を呼び出してください。遅れたセグが発生したときにメソッドが呼び出されます。0.5秒の遅延または1秒で呼び出すと、 – Shubhank

+0

を呼び出します。unwindメソッドで呼び出すことはできません。 VC1はまだアクティブではありません。私はunwindメソッドでフラグをセットし、 'viewDidAppear'でそれをチェックし、それを使って警告を表示することをお勧めします。 – Paulw11