1

我正在尝试rootViewController使用 Objective-C 在 iOS 13 中获取。我正在做这样的事情:

for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) {
    UIWindowScene *windowScene = (UIWindowScene *) scene;
    UIWindowSceneDelegate *windowSceneDelegate = (UIWindowSceneDelegate *) windowScene.delegate;
    windowSceneDelegate.window = ...
}

但是,当我尝试访问(获取)中的window属性时,出现以下错误:windowSceneDelegate.window =rootViewController

在转发类对象“UIWindowSceneDelegate”中找不到属性“窗口”

但是当我去定义时UIWindowSceneDelegate,我看到了一个window属性:

在此处输入图像描述

那么在 iOS 13 中使用 Objective-C 获取 rootViewController 的正确方法是什么?

4

1 回答 1

2

将您的代码更改为:

for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) {
    if ([scene.delegate conformsToProtocol:@protocol(UIWindowSceneDelegate)]) {
        UIWindow *window = [(id<UIWindowSceneDelegate>)scene.delegate window];
    }
}

当你打开UIKitsUIWindowScene.h头文件时,它包含:

@class UIScreen, UIWindow, UIWindowSceneDelegate, UISceneDestructionRequestOptions, CKShareMetadata, UISceneSizeRestrictions;

看,有UIWindowSceneDelegate。这是前向声明。

阅读此答案以了解前向声明是什么。

于 2020-07-20T19:22:40.180 回答