gpt4 book ai didi

ios - View 层次结构不正确 : Presenting view controllers on detached view controllers is discouraged

转载 作者:行者123 更新时间:2023-11-29 02:50:50 25 4
gpt4 key购买 nike

我一直收到与我使用 iAd 的 GKTurnBasedMatchmakerViewController 和 BannerViewController 有关的警告。该警告是:

Presenting view controllers on detached view controllers is discouraged <RootViewController: 0x14cd143c0>

下面显示的导致此警告的代码序列有什么问题?

在 AppDelegate.h 中

@interface AppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
RootViewController *viewController;
}

在 AppDelegate.m 中

- (void) applicationDidFinishLaunching:(UIApplication*)application {

viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];

[window setRootViewController:viewController];
[window addSubview: viewController.view];
}

然后,当用户在我的主屏幕上按下播放按钮时,我首先按如下方式打开游戏中心 View Controller (注意第 2 行将 presentingViewController 设置为等于在 appDelegate 中设置的 rootViewController):

AppDelegate * theAppDelegate = (AppDelegate *) [UIApplication sharedApplication].delegate;
self.presentingViewController = theAppDelegate.viewController;
GKTurnBasedMatchmakerViewController *mmvc = [[GKTurnBasedMatchmakerViewController alloc] initWithMatchRequest:request];
[presentingViewController presentViewController: mmvc animated: YES completion:nil];

以上代码运行后,加载了一个新的场景。这个场景在我的GameSelectionLayer.h中是这样描述的:

@interface GameSelectionLayer : CCLayer <InAppStoreControlLayerDelegate> {
...
RootViewController *viewController;
AppDelegate *app;
BannerViewController *bannerViewController;
}

然后在我的 GameSelectionLayer.mm 中,我按如下方式加载 bannerViewController onEnter:

-(void)onEnter {
[super onEnter];

app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
viewController = [(AppDelegate *)[[UIApplication sharedApplication] delegate] viewController];

bannerViewController = [[BannerViewController alloc] initWithContentViewController:viewController];
app.window.rootViewController = bannerViewController;
}

当上面的代码运行时,我收到上面提到的警告。请让我知道您认为我可能做错了什么导致了这个警告。

最佳答案

问题是您正在替换一个 View Controller 的 View 层次结构,该 View Controller 显示了另一个 View Controller 。当您尝试从未附加到窗口或没有附加到窗口的后代 View Controller 的 View Controller 呈现 View Controller 时,会出现“分离”警告。

这里我推荐两种方法。在替换 Root View Controller 之前关闭所有 View Controller ,或者,在这两个选项中选择更好的一个,使用另一个具有自己的 Root View Controller 层次结构的窗口。

另外,请注意,您不应将 View Controller 的 View 添加为窗口的 subview 。当您将 View Controller 设置为 Root View Controller 时,系统会为您完成。

关于ios - View 层次结构不正确 : Presenting view controllers on detached view controllers is discouraged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24561754/

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