尝试加载视图控制器的视图,而它正在释放… 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
你的导航控制器只是为了理智也…