Ho un gesto di pressione lunga impostato su un UITableView
che presenta uno UIAlertController
contenente il testo della cella. Quando il UIAlertController
è presentato ottengo questo avvertimento:Avviso: tentativo di presentare <UIAlertController: 0x7facd3946920> su <...> che è già presente (null)
Attempt to present <UIAlertController: 0x7fd57384e8e0> on <TaskAppV2.MainTaskView: 0x7fd571701150> which is already presenting (null)
Dalla mia comprensione, MainTaskView (la UITableView
) è già presenta una vista, quindi non dovrebbe presentare una seconda vista, il UIAlertController.
così ho provato this soluzione da una domanda simile. Non funziona quando ricevo lo stesso avvertimento. Cosa posso fare per risolvere questo avvertimento? Vedi sotto per il codice:
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", preferredStyle: 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")
}
uscita della 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
Per qualche ragione, entrambi i pezzi di codice sono in esecuzione nel if quando il gesto pressione prolungata accade. L'avviso viene presentato e il testo viene stampato sulla console. È un problema?
Modifica: come ha detto Matt, non avevo tutto il mio codice nell'ambito del test di riconoscimento dei gesti. Spostando quello in risolto il mio problema. Il codice al di fuori del test è stato eseguito due volte, con la presentazione dello UIAlertController
due volte.
Possiamo vedere il codice rilevante? Visualizza * i controller * presentano altri * controller *, quindi il tuo UITableView non dovrebbe essere il problema. Sembra che tu stia mescolando un po 'le viste e i controller. – Connor
La risposta accettata sulla domanda che hai collegato sembra abbastanza chiara. Puoi aggiungere del codice rilevante alla tua domanda? –
Certo, dammi un paio di minuti. – MortalMan