在 iOS 13 [UIApplication sharedApplication] delegate].window 中使用objective-c 不起作用

Posted

技术标签:

【中文标题】在 iOS 13 [UIApplication sharedApplication] delegate].window 中使用objective-c 不起作用【英文标题】:in iOS 13 [UIApplication sharedApplication] delegate].window does not work using objective-c 【发布时间】:2020-02-03 16:11:11 【问题描述】:

我需要使用 Objective-c 显示来自非 UIView 类的警报。

下面是代码:

 UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@“Sample” message message:@“hello message” preferredStyle:UIAlertControllerStyleAlert];

[alertVC addAction:[UIAlertAction actionWithTitle:@"Okay" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) ]];

[[[UIApplication sharedApplication] delegate].window.rootViewController presentViewController:alertVC animated:YES completion:nil];

上面的这个不再起作用了,我无法在objective-c中找到相同代码的任何其他替代方案。 我遇到了这个链接How to resolve: 'keyWindow' was deprecated in ios 13.0,但解决方案是在 Swift 中,而不是在 Objective-c 中。

谢谢

【问题讨论】:

在目标 c 中尝试相同的单词 【参考方案1】:

问题是在 iOS 13 中,这个表达式...

[[UIApplication sharedApplication] delegate].window.rootViewController

...是nil。这是因为 window 属性属于 scene 委托,而不是 app 委托。您最好通过 UIApplication 本身来访问窗口。例如,查看应用程序的窗口并找到关键的窗口。

【讨论】:

Objective-C 代码见***.com/a/58447461/341994【参考方案2】:

您试图在键窗口中显示视图控制器,这将产生异常。试试这个代码

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Tap!" message:message preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *action = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
[alert addAction:action];
[self presentViewController:alert animated:YES completion:nil];

【讨论】:

【参考方案3】:

我认为在您的情况下,最简单的方法是使用以下代码替换您的最后一个代码行

[UIApplication.sharedApplication.windows.lastObject.rootViewController 
    presentViewController:alertVC animated:YES completion:nil];

【讨论】:

@sia,我的附加回答是会改变什么吗? )) ...给它一个机会 - 试试吧!

以上是关于在 iOS 13 [UIApplication sharedApplication] delegate].window 中使用objective-c 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Swift/iOS13 - UIApplication.shared.delegate.window?.rootViewController?.present() 来自自定义类

如何在 iOS 13 中更改状态栏 Alpha?

iOS 13 设置状态栏背景颜色

UIApplication 将在后台运行多长时间

iOS Swift 修改状态栏的风格。

在 iOS13 上更改状态栏颜色