Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIAlertController:supportedInterfaceOrientations was invoked recursively

When two alert present one by one, i means one alert present and over them another alert presenting and app crashing. I have used UIAlertController to display alert. App crashing only in iOS 9 device.

Please help me at this point.

like image 618
Ashvin A Avatar asked Jul 14 '15 12:07

Ashvin A


2 Answers

This is a bug in iOS 9 that it failed to retrieve the supportedInterfaceOrientations for UIAlertController. And it seems it dropped to an infinite recursion loop in looking for the supportedInterfaceOrientations for UIAlertController (e.g., it tracks back to UIAlertControler -> UIViewController -> UINavigationController -> UITabBarController -> UIAlertController -> ...), while the call to UIAlertController:supportedInterfaceOrientations actually is not implemented/overridden in the source code.

In my solution, I just added the following piece of code:

extension UIAlertController {          public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {         return UIInterfaceOrientationMask.Portrait     }     public override func shouldAutorotate() -> Bool {         return false     } } 

Then UIAlertController will directly return the supported orientation value without infinite loop. Hope it helps.

Edit: Swift 3.0.1

extension UIAlertController {     open override var supportedInterfaceOrientations: UIInterfaceOrientationMask {         return UIInterfaceOrientationMask.portrait     }       open override var shouldAutorotate: Bool {         return false     } } 
like image 106
Annie Avatar answered Sep 20 '22 19:09

Annie


My solution is an Objective-C category for UIAlertViewController. Simply include UIAlertController+supportedInterfaceOrientations.h in any classes that use UIAlertController

UIAlertController+supportedInterfaceOrientations.h

// //  UIAlertController+supportedInterfaceOrientations.h  #import <UIKit/UIKit.h> @interface UIAlertController (supportedInterfaceOrientations) @end 

UIAlertController+supportedInterfaceOrientations.m

// //  UIAlertController+supportedInterfaceOrientations.m  #import "UIAlertController+supportedInterfaceOrientations.h"  @implementation UIAlertController (supportedInterfaceOrientations)  #if __IPHONE_OS_VERSION_MAX_ALLOWED < 90000 - (NSUInteger)supportedInterfaceOrientations {     return UIInterfaceOrientationMaskPortrait; } #else - (UIInterfaceOrientationMask)supportedInterfaceOrientations {     return UIInterfaceOrientationMaskPortrait; } #endif  @end 
like image 31
Jim Holland Avatar answered Sep 20 '22 19:09

Jim Holland