经过长时间的尝试和搜索 Internet 和 StackOverflow,我找不到我需要的答案。我的问题是一个警告:
Warning: Attempt to present <PAPasscodeViewController: 0x81cc8a0> on <ServerViewController: 0x75864b0> whose view is not in the window hierarchy!
我正在使用一个名为“PAPasscodeViewController”的自定义控件,它本身正在工作,但是当我尝试在 ApplicationDidBecomeActive 方法上显示视图时,它会在控制台输出中显示此警告。我正在使用这种方法来跟踪通知:
[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(wait)
name:UIApplicationDidBecomeActiveNotification object:nil];
我-(void)wait
的包含这个:
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];
NSLog(@"waiting");
[self performSelector:@selector(enterPasscode) withObject:nil afterDelay:.3f];
该应用程序有一个 RootViewController 和一个 GeneralViewController,如果用户已经下载了一个 Config 包,GeneralViewController 在作为 modalView 启动后会被推入,如下所示(在 中viewDidLoad
):
GeneralView = [[GeneralViewController alloc] initWithNibName:@"GeneralViewController" bundle:[NSBundle mainBundle]];
GeneralView.modalTransitionStyle=UIModalTransitionStyleCrossDissolve;
[self presentViewController:GeneralView animated:YES completion:nil];
在 GeneralView 中,用户有更多选项来通过按钮打开新视图,并且它们通过 IBActions (如 GeneralViewController)被推入。
因此,当发生这种情况时,就会出现问题:
我正在启动应用程序,配置包已经安装,用户想要在“ServerViewController”上跟踪他的 ServerData,所以他为此触摸了相应的按钮。然后视图被推入(它现在的 RootViewController(由 AppDelegate 管理)-> GeneralViewController(推入)-> ServerViewController(推入)),一切正常。现在,当用户返回他的主屏幕时,我正在关闭模态视图“ServerViewController”,如下所示:
-(void)viewDidAppear:(BOOL)animated{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(close:)
name:UIApplicationDidEnterBackgroundNotification object:nil];}
-(IBAction)close:(id)sender{
[self dismissViewControllerAnimated:YES completion:nil];
}
所以当应用程序进入后台时,ServerViewController 被关闭,在恢复应用程序后,GeneralViewController 现在是活动的视图控制器,在他-(void)viewDidAppear
我-(void)wait
从上面调用的时候,它调用了这个函数:
- (void)enterPasscode{
PAPasscodeViewController *passcodeViewController = [[PAPasscodeViewController alloc] initForAction:PasscodeActionEnter];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
passcodeViewController.backgroundView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStyleGrouped];
}
passcodeViewController.delegate = self;
passcodeViewController.passcode = [configArray objectAtIndex:3];
passcodeViewController.simple = YES;
[self presentViewController:passcodeViewController animated:YES completion:nil];
}
这工作正常,但后来我从上面收到烦人的警告(再次在这里,所以你不必向上滚动)
Warning: Attempt to present <PAPasscodeViewController: 0x75d1c10> on <ServerViewController: 0x818b390> whose view is not in the window hierarchy!
实际上这很令人困惑,因为我认为我的 GeneralViewController 现在又是 Active ViewController ......也许我只是被这个问题的简单性蒙蔽了......但也许这里有人可以帮助我理解。我在 StackOverflow 或其他网站的任何其他帖子中都没有找到任何解决方案!