我正在尝试使用Objective-C在iOS 13中获得rootViewController
。我正在做这样的事情:
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
属性:
那么,使用Objective-C在iOS 13中获取rootViewController的正确方法是什么?
答案 0 :(得分:1)
将您的代码更改为:
for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) {
if ([scene.delegate conformsToProtocol:@protocol(UIWindowSceneDelegate)]) {
UIWindow *window = [(id<UIWindowSceneDelegate>)scene.delegate window];
}
}
打开UIKit
的{{1}}头文件时,它包含:
UIWindowScene.h
看,有@class UIScreen, UIWindow, UIWindowSceneDelegate, UISceneDestructionRequestOptions, CKShareMetadata, UISceneSizeRestrictions;
。这是前向声明。
阅读this answer以了解什么是前向声明。