У меня есть жест длительного нажатия, установленный на UITableView
, который представляет UIAlertController
, содержащий текст ячейки. Когда представлен UIAlertController
, я получаю это предупреждение:
Attempt to present <UIAlertController: 0x7fd57384e8e0> on <TaskAppV2.MainTaskView: 0x7fd571701150> which is already presenting (null)
Насколько я понимаю, MainTaskView (UITableView
) уже представляет представление, поэтому он не должен представлять второе представление, UIAlertController.
Поэтому я попробовал это решение из аналогичного вопроса. Это не работает, так как я получаю то же предупреждение. Что я могу сделать, чтобы решить это предупреждение? См. ниже код:
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")
}
Вывод консоли:
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
По какой-то причине обе части кода выполняются в операторе if, когда происходит жест длительного нажатия. Представлено предупреждение, и текст выводится на консоль. Это проблема?
Правка. Как сказал Мэтт, мой код не был включен в объем теста распознавателя жестов. Перемещение этого исправило мою проблему. Код вне теста выполнялся дважды, в результате чего UIAlertController
отображалось дважды.
which is already presenting (null)
кажется очень странным. Это то, что нужно попытаться отследить в первую очередь. - person matt   schedule 20.05.2015println("\(presentedViewController)")
дает ноль. Что, я думаю, имеет смысл. Что я могу сделать, чтобы отследить это? - person MortalMan   schedule 20.05.2015gestureRecognizer
настроен в MainTaskView (контроллер таблицы)viewDidLoad
. При длительном нажатии на ячейку или пустой вид таблицы вызывается функция, которую я сделал для этого жеста. Я обновлю вопрос. - person MortalMan   schedule 20.05.2015