尝试加载视图控制器的视图,而它正在释放… UIAlertController

我正在构buildXcode 7.0的发行版本。 没有故事板,只是笔尖文件。

我有一个由应用程序委托创build的UINavigationController ,并使用视图控制器初始化它。

 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; UIViewController *viewController = [[TGMainViewController alloc] initWithNibName:nil bundle:nil]; self.navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; self.navigationController.navigationBar.barStyle = UIBarStyleBlack; self.navigationController.navigationBar.hidden = YES; self.window.rootViewController = self.navigationController; [self.window makeKeyAndVisible]; 

在使用以下命令导航到新视图之后:

 TGRoutePreparationViewController *viewController = [[TGRoutePreparationViewController alloc] initWithNibName:nil bundle:nil]; [self.navigationController pushViewController:viewController animated:YES]; 

然后回去使用:

 [self.navigationController popViewControllerAnimated:YES]; 

我收到以下错误:

 Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<UIAlertController: 0x7b29a600>) 

虽然我在应用程序中使用UIAlertController ,但在接收到此错误之前没有使用或实例化。 这只发生在iOS 9.0下运行。 在iOS 8.4下运行不会产生错误。 在所有情况下,该应用程序似乎正常工作,导航似乎正在工作。

我怀疑这个错误是误导性的,但是我该如何解决这个问题呢?

Per @Nick,这里是使用的dealloc方法:

 - (void)deregisterNotificationHandlers { [[NSNotificationCenter defaultCenter] removeObserver:self]; } - (void)dealloc { [self deregisterNotificationHandlers]; } 

我有我的UIViewController相同的问题,我只是在我的类中声明variableslet alert = UIAlertView()而不使用它,它是作为variables在类内的所有function。 通过消除解决问题。 所以如果你已经定义了来自UIAlertView或者UIAlertViewController警报而不使用它或者在类variables中,请检查你的类。

我终于可以将其追踪到第三方库Mapbox GL中的UIActionSheet类variables。

我与该开发团队打开了一个问题: https : //github.com/mapbox/mapbox-gl-native/issues/2475

部分信用(和投票和赏金)@Aaoli提及有一个UIAlertView作为类variables。

我通过移动我的一些代码来viewDidAppear来解决这个问题。 如果我使用UIAlertController ,它会导致你提到的同样的问题,将不会显示,我解决了同样的方式。

让我知道如果这是行不通的!

我们有与UIAlertController相同的问题。

 let alert = UIAlertController(title: "", message: "", preferredStyle: UIAlertControllerStyle.Alert) alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: {(action : UIAlertAction!) in //some actions } )) 

我忘了添加下面的行。 下线解决了这个问题。

 self.presentViewController(alert, animated: true, completion: nil) 

在我的情况下,在Swift 3中,添加动作后我错过了下面的代码

 presentViewController(theAlert, animated: true, completion: nil) 

所以,工作代码如下

 override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if (editingStyle == UITableViewCellEditingStyle.Delete) { let title = "Delete ????" let message = "Are you sure you want to delete this item?" let theAlert = UIAlertController(title: title, message: message, preferredStyle: .ActionSheet) let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil) theAlert.addAction(cancelAction) let onDelete = UIAlertAction(title: "Delete", style: .Destructive, handler: { (action) -> Void in self.items.removeAtIndex(indexPath.row) self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic) }) theAlert.addAction(onDelete) presentViewController(theAlert, animated: true, completion: nil) } } 

//注意我正在使用一个样本数组

 var items = ["iPhone", "iPad", "Mac"] 

我有同样的问题,当我试图删除UIViewController子类中我的视图上的“框架”观察员。 我通过将removeObserver包装在isViewLoaded()解决了这个问题。 你究竟在看什么?

我有这个问题没有导航控制器…我知道这听起来很明显,但在各种项目中跳来跳去,这没有一个UINavigationController手….所以其他人来到这里,你可能想NSLog你的导航控制器只是为了理智也…