2016-04-30 3 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.

размотки Segue увольняет вид heriarchy и поэтому ваше предупреждение не получает ссылку на контроллер представления, чтобы показать с.

Чтобы решить эту проблему, покажите свое предупреждение в контроллере View, который вы расслабляете или дождитесь завершения действия контроллера предупреждений перед его размоткой.

+0

Я показываю его в контроллере вида, к которому я разматываю. В основном у меня есть VC1 и VC2. У VC1 есть метод разматывания (требуется для пользовательских раскручиваний). Метод запускается, когда пользователь переходит от VC2 к VC1. 'showAlert()' находится в этом режиме размотки. Я хочу вернуться с VC2 на VC1 и показать предупреждение. – Lawrence413

+0

в этом случае вызовите его после задержки .. метод вызывается, когда происходит размотка разговора. Поэтому вызовите его с задержкой 0,5 секунды или 1 сек и проверьте – Shubhank

+0

. Вы не можете называть это методом разматывания как VC1 еще не активирован. Я бы предложил вам установить флаг в методе размотки и проверить это в 'viewDidAppear' и использовать его для отображения предупреждения – Paulw11

Смежные вопросы