热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS13中未调用应用程序委托方法

如何解决《iOS13中未调用应用程序委托方法》经验,为你挑选了1个好方法。

我正在使用Xcode 11并为iOS 13构建应用程序。在Xcode中创建的新项目中,缺少一些UIApplicationDelegate方法,因此我将它们重新添加到了应用程序委托文件中。“单视图应用程序”项目的新模板缺少这些方法。问题在于,除了之外,没有其他任何委托方法被调用-application:didFinishLaunchingWithOptions:。这是我的应用程序委托:

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSLog(@"application:didFinishLaunchingWithOptions:");
    return YES;
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    NSLog(@"applicationDidEnterBackground:");
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    NSLog(@"applicationWillEnterForeground:");
}
#pragma mark - UISceneSession lifecycle

- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
    return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role];
}

- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet *)sceneSessions {
}

@end

nevan king.. 63

iOS 13具有一种发送应用程序生命周期事件的新方法。相反,通过未来的UIApplicationDelegate他们来过UIWindowSceneDelegate这是一个UISceneDelegate子协议。UISceneDelegate具有重要的委托方法。

此更改是为了在iOS 13中支持多个窗口。WWDC 2019会话212“ 在iPad上引入多个窗口”中有更多信息。技术信息的发布时间大约是14:30,由一位穿着高顶鞋的男人提供。较短的会议258“ 为多个Windows构筑您的应用程序”还对更改进行了很好的介绍。

它是这样工作的:如果Info.plist中有一个“ Application Scene Manifest ”,并且您的应用程序委托有一个configurationForConnectingSceneSession方法,UIApplication则不会将后台和前台生命周期消息发送给您的应用程序委托。这意味着这些方法中的代码将无法运行:

applicationDidBecomeActive

applicationWillResignActive

applicationDidEnterBackground

applicationWillEnterForeground

应用程序委托仍将接收willFinishLaunchingWithOptions:didFinishLaunchingWithOptions:方法调用,因此这些方法中的任何代码将像以前一样工作。

如果您希望恢复以前的行为,则需要

    从应用程序的Info.plist中删除“ Application Scene Manifest”条目

    注释或删除application:configurationForConnectingSceneSession:options:方法(或Swift application(_:configurationForConnecting:options:)函数)

    将window属性添加回您的应用程序委托(@property (strong, nonatomic) UIWindow *window;

或者,打开Xcode创建的SceneDelegate文件,并在其中使用新的生命周期方法:

- (void)sceneDidBecomeActive:(UIScene *)scene {
}
- (void)sceneWillResignActive:(UIScene *)scene {
}
... etc

UIScene通过在Info.plist中将“启用多个Windows”(“ UIApplicationSupportsMultipleScenes”)设置为“ NO”(这是新项目的默认设置),可以在不采用多窗口支持的情况下使用新的生命周期资料。这样,您可以在较小的步骤中开始采用新的API。

您可以看到场景委托方法名称与应用程序委托名称紧密匹配。一个令人困惑的事情是应用程序委托方法没有被弃用,因此,如果同时具有应用程序委托和场景委托方法,则不会收到警告,但只会调用一个。

其他的事情UISceneDelegate还包括用户活动(continueUserActivity:等),状态恢复(stateRestorationActivityForScene:等),状态栏问题和打开的URL。(我不确定它们是否代替了应用程序委托方法)。它还具有生命周期事件的类似通知(例如UISceneWillDeactivateNotification)。

在WWDC会议上,一些适合您的图像:

Swift的等效功能:

班级职责:



1> nevan king..:

iOS 13具有一种发送应用程序生命周期事件的新方法。相反,通过未来的UIApplicationDelegate他们来过UIWindowSceneDelegate这是一个UISceneDelegate子协议。UISceneDelegate具有重要的委托方法。

此更改是为了在iOS 13中支持多个窗口。WWDC 2019会话212“ 在iPad上引入多个窗口”中有更多信息。技术信息的发布时间大约是14:30,由一位穿着高顶鞋的男人提供。较短的会议258“ 为多个Windows构筑您的应用程序”还对更改进行了很好的介绍。

它是这样工作的:如果Info.plist中有一个“ Application Scene Manifest ”,并且您的应用程序委托有一个configurationForConnectingSceneSession方法,UIApplication则不会将后台和前台生命周期消息发送给您的应用程序委托。这意味着这些方法中的代码将无法运行:

applicationDidBecomeActive

applicationWillResignActive

applicationDidEnterBackground

applicationWillEnterForeground

应用程序委托仍将接收willFinishLaunchingWithOptions:didFinishLaunchingWithOptions:方法调用,因此这些方法中的任何代码将像以前一样工作。

如果您希望恢复以前的行为,则需要

    从应用程序的Info.plist中删除“ Application Scene Manifest”条目

    注释或删除application:configurationForConnectingSceneSession:options:方法(或Swift application(_:configurationForConnecting:options:)函数)

    将window属性添加回您的应用程序委托(@property (strong, nonatomic) UIWindow *window;

或者,打开Xcode创建的SceneDelegate文件,并在其中使用新的生命周期方法:

- (void)sceneDidBecomeActive:(UIScene *)scene {
}
- (void)sceneWillResignActive:(UIScene *)scene {
}
... etc

UIScene通过在Info.plist中将“启用多个Windows”(“ UIApplicationSupportsMultipleScenes”)设置为“ NO”(这是新项目的默认设置),可以在不采用多窗口支持的情况下使用新的生命周期资料。这样,您可以在较小的步骤中开始采用新的API。

您可以看到场景委托方法名称与应用程序委托名称紧密匹配。一个令人困惑的事情是应用程序委托方法没有被弃用,因此,如果同时具有应用程序委托和场景委托方法,则不会收到警告,但只会调用一个。

其他的事情UISceneDelegate还包括用户活动(continueUserActivity:等),状态恢复(stateRestorationActivityForScene:等),状态栏问题和打开的URL。(我不确定它们是否代替了应用程序委托方法)。它还具有生命周期事件的类似通知(例如UISceneWillDeactivateNotification)。

在WWDC会议上,一些适合您的图像:

Swift的等效功能:

班级职责:


是的,的确是,但是老实说,我只是创建一个新项目并将所有我的源代码文件添加到其中。我已经尝试修复它太长时间了,甚至在苹果论坛上都解释了这种情况,没人知道发生了什么。典型的XCode越野车行为。
推荐阅读
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • Mysqlcheck作为MySQL提供的一个实用工具,主要用于数据库表的维护工作,包括检查、分析、修复及优化等操作。本文将详细介绍如何使用Mysqlcheck工具,并提供一些实践建议。 ... [详细]
  • 本文详细解析 Skynet 的启动流程,包括配置文件的读取、环境变量的设置、主要线程的启动(如 timer、socket、monitor 和 worker 线程),以及消息队列的实现机制。 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • Kubernetes Services详解
    本文深入探讨了Kubernetes中的服务(Services)概念,解释了如何通过Services实现Pods之间的稳定通信,以及如何管理没有选择器的服务。 ... [详细]
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • 在测试软件或进行系统维护时,有时会遇到电脑蓝屏的情况,即便使用了沙盒环境也无法完全避免。本文将详细介绍常见的蓝屏错误代码及其解决方案,帮助用户快速定位并解决问题。 ... [详细]
  • Fiddler 安装与配置指南
    本文详细介绍了Fiddler的安装步骤及配置方法,旨在帮助用户顺利抓取用户Token。文章还涵盖了一些常见问题的解决方案,以确保安装过程顺利。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文探讨了在使用JavaMail发送电子邮件时,抄送功能未能正常工作的问题,并提供了详细的代码示例和解决方法。 ... [详细]
author-avatar
墨鱼轩869
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有