2016-04-30 39 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 
    } 
} 

該方法執行(在某些情況下,但是出於測試目的,做它每次)定製的開卷SEGUE後。

爲什麼我有這個問題?我之前使用過UIAlertController,但我沒有問題。

+0

你從哪裏調用'showAlert'函數? – Shubhank

+0

在自定義展開順序之後執行的方法。該方法也可以做其他事情,並且它們完美地工作。 – Lawrence413

回答

1

根據你的評論你顯示showAlert一個方法,執行後自定義展開segue。

開卷賽格瑞駁斥的觀點heriarchy,因此您的警報 沒有得到參照視圖控制器從展示。

要解決此問題,請在視圖控制器中顯示警報,使其展開或等待警報控制器操作在展開前完成。

+0

我在放鬆的視圖控制器中顯示它。基本上我有VC1和VC2。 VC1有一個展開方法(自定義展開細節需要)。該方法在用戶從VC2轉到VC1時執行。 'showAlert()'在那個展開方法中。我想從VC2回到VC1並顯示警報。 – Lawrence413

+0

在那種情況下,在延遲後調用它..當展開順序正在發生時調用該方法..所以用0.5秒延遲或1秒調用它並檢查 – Shubhank

+0

您不能在展開方法中將其稱爲VC1尚未激活。我建議你在展開方法中設置一個標誌,並檢查'viewDidAppear'並使用它來顯示警報 – Paulw11

相關問題