Reputation: 4549
I am getting an error as below while I am tapping on TableView after click on Search.
Error Below 2016-06-03 11:20:31.578 ContactPLUS[1724:678512] Warning: Attempt to present on which is already presenting (null) st >> 2016-06-03 11:20:32.001 ContactPLUS[1724:678512] -[_UIAlertControllerAlertPresentationController adaptivePresentationController]: unrecognized selector sent to instance 0x1616570d0
2016-06-03 11:20:32.001 ContactPLUS[1724:678512] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_UIAlertControllerAlertPresentationController adaptivePresentationController]: unrecognized selector sent to instance 0x1616570d0'
*** First throw call stack: (0x182876e38 0x181edbf80 0x18287dccc 0x18287ac74 0x182778d1c 0x18836433c 0x1880117f8 0x187d20740 0x187c72fd8 0x187c80990 0x1879b24a4 0x18282c7b0 0x18282a554 0x18282a984 0x182754d10 0x18403c088 0x187a29f70 0x1000f8070 0x1822f28b8) libc++abi.dylib: terminating with uncaught exception of type NSException
My Code below
Going in the function
dispatch_async(dispatch_get_main_queue()) {
self.searchActivityLoader.stopAnimating()
self.searchActivityLoader.hidden = true
self.showError(self.noDataFound)
}
Logic to display Alert controller:
func showError(errorStr: String){
dispatch_async(dispatch_get_main_queue(), {
if(!errorStr.isEmpty){
let alertController = self.controllerUtil!.customOkAlert("Fail",buttonTitle:"OK" , alertMessage: errorStr)
self.presentViewController(alertController, animated: true, completion: nil)
//**Error comes after executing above two lines**
}
self.genericArr = []
self.contactsTableView.dataSource = self
self.contactsTableView.reloadData()
self.searchActivityLoader.stopAnimating()
self.searchActivityLoader.hidden = true
})
}
///CustomeOkAlert
//Alert controller to manage with default actions and custom messages
func customOkAlert(alertPageTitle: String,buttonTitle: String, alertMessage: String) -> UIAlertController
{
let customeAlert = UIAlertController(title: alertPageTitle, message: alertMessage, preferredStyle: UIAlertControllerStyle.Alert)
customeAlert.view.layer.cornerRadius = 10
customeAlert.view.backgroundColor = utility.uicolorFromHex(0xEBEBED)
customeAlert.view.tintColor = utility.uicolorFromHex(0x70B420)
let cancelAction: UIAlertAction = UIAlertAction(title: buttonTitle, style: .Default){action in
//do nothing
}
customeAlert.addAction(cancelAction)
return customeAlert
}
Upvotes: 0
Views: 1257
Reputation: 2229
The reason of Attempt to present <UIAlertController which is already presenting
is frequent error comming, you need to add check if error message is already presented.
Following code helped me to reproduce your problem. Commenting the check int the handleError
method will start issue reproduction:
class ViewController: UIViewController {
var alertController: UIAlertController!
override func viewDidLoad() {
super.viewDidLoad()
handleError()
handleError()
}
func handleError() {
dispatch_async(dispatch_get_main_queue(), {
//commenting this check will start issue reproduction
if self.alertController != nil {
print("alert is already presented")
return
}
self.alertController = self.customOkAlert("Fail",buttonTitle:"OK" , alertMessage: "qweqwe")
self.presentViewController(self.alertController, animated: true, completion: nil)
})
}
func customOkAlert(alertPageTitle: String,buttonTitle: String, alertMessage: String) -> UIAlertController
{
let customeAlert = UIAlertController(title: alertPageTitle, message: alertMessage, preferredStyle: UIAlertControllerStyle.Alert)
customeAlert.view.layer.cornerRadius = 10
let cancelAction: UIAlertAction = UIAlertAction(title: buttonTitle, style: .Default){action in
self.alertController = nil
}
customeAlert.addAction(cancelAction)
return customeAlert
}
}
Upvotes: 0