作者:墨鱼轩869 | 来源:互联网 | 2022-10-21 15:49
我正在使用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越野车行为。