Advertencia: Intento presentar <UIAlertController: 0x7facd3946920> en <…> que ya está presentando (nulo)

Tengo un gesto de prensa largo establecido en un UITableView que presenta un UIAlertController contiene el text de la celda. Cuando se presenta el UIAlertController recibo esta advertencia:

 Attempt to present <UIAlertController: 0x7fd57384e8e0> on <TaskAppV2.MainTaskView: 0x7fd571701150> which is already presenting (null) 

Desde mi entendimiento, MainTaskView (el UITableView ) ya presenta una vista, por lo que no debe presentar una segunda vista, el UIAlertController. Entonces probé esta solución de una pregunta similar. No funciona porque recibo la misma advertencia. ¿Qué puedo hacer para resolver esta advertencia? Vea a continuación el código:

 func longPressedView(gestureRecognizer: UIGestureRecognizer){ /*Get cell info from where user tapped*/ if (gestureRecognizer.state == UIGestureRecognizerState.Ended) { var tapLocation: CGPoint = gestureRecognizer.locationInView(self.tableView) var tappedIndexPath: NSIndexPath? = self.tableView.indexPathForRowAtPoint(tapLocation) if (tappedIndexPath != nil) { var tappedCell: UITableViewCell? = self.tableView.cellForRowAtIndexPath(tappedIndexPath!) println("the cell task name is \(tappedCell!.textLabel!.text!)") } else { println("You didn't tap on a cell") } } /*Long press alert*/ let tapAlert = UIAlertController(title: "Long Pressed", message: "You just long pressed the long press view", prefernetworkingStyle: UIAlertControllerStyle.Alert) tapAlert.addAction(UIAlertAction(title: "OK", style: .Destructive, handler: nil)) /* if (self.presentedViewController == nil) { self.presentViewController(tapAlert, animated: true, completion: nil) } else { println("already presenting a view") } */ self.presentViewController(tapAlert, animated: true, completion: nil) println("presented") } 

Salida de console:

 presented You didn't tap on a cell 2015-05-19 22:46:35.692 TaskAppV2[60765:3235207] Warning: Attempt to present <UIAlertController: 0x7fc689e05d80> on <TaskAppV2.MainTaskView: 0x7fc689fc33f0> which is already presenting (null) presented 

Por alguna razón, ambos fragments de código se ejecutan en la instrucción if cuando ocurre el gesto de pulsación prolongada. Se presenta la alerta y el text se imprime en la console. ¿Es esto un problema?

Editar: como dijo Matt, no tenía todo mi código en el scope de la testing de reconocimiento de gestos. Mover eso arregló mi problema. El código fuera de la testing se ejecutaba dos veces, lo que hacía que el UIAlertController se presentara dos veces.

Por alguna razón, ambas piezas de código se ejecutan en el if

Eso debería haber sonado campanas de alarma para mí. Es imposible que tanto el if como el else se ejecuten. Este código debe ejecutarse dos veces.

Esto se debe a que no está probando el estado del reconocedor de gestos. Una pulsación larga gr envía su post de acción dos veces . Está ejecutando este código tanto en la pulsación larga como en la versión. Necesita probar el estado de la gr para que no haga eso. Ejemplo:

 @IBAction func longPressedView(g: UIGestureRecognizer) { if g.state == .Began { // ... do it all here } } 

He tenido el mismo problema. Pude solucionarlo con este código:

  if self.presentedViewController == nil { self.present(Alert, animated: true, completion: nil) } else { self.dismiss(animated: false, completion: nil) self.present(Alert, animated: true, completion: nil) }