gpt4 book ai didi

iphone - ModalViewController 不在窗口层次结构中

转载 作者:行者123 更新时间:2023-12-01 19:07:38 24 4
gpt4 key购买 nike

经过长时间的尝试和搜索 Internet 和 StackOverflow,我找不到我需要的答案。
我的问题是一个警告:

Warning: Attempt to present <PAPasscodeViewController: 0x81cc8a0> on <ServerViewController: 0x75864b0> whose view is not in the window hierarchy!

我正在使用一个名为“PAPasscodeViewController”的自定义控件,它本身正在工作,但是当我尝试在 ApplicationDidBecomeActive 方法上显示 View 时,它会在控制台输出中显示此警告。
我正在使用这种方法来跟踪通知:
[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 中,用户有更多选项来通过按钮打开新 View ,并且它们通过 IBActions (如 GeneralViewController)被插入。

因此,当发生这种情况时,就会出现问题:

我正在启动应用程序,配置包已经安装,用户想要在“ServerViewController”上跟踪他的 ServerData,所以他为此触摸了相应的按钮。
然后 View 被插入(它现在的 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 现在是事件的 View Controller ,并且在他的 -(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 或其他网站的任何其他帖子中都没有找到任何解决方案!

最佳答案

当您的 ServerViewController 未显示时,您必须删除 self 作为观察者。将以下代码添加到 ServerViewController:

- (void)viewDidDisappear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

关于iphone - ModalViewController 不在窗口层次结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18749368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com