私有func didFinishLaunchingWithOptions没被调用? (斯威夫特3)
当应用程序第一次开始运行时,是不是应该调用didFinishLaunchingWithOptions
? 我在这个方法中设置了一个断点,当我在模拟器中运行应用程序时,断点不会被命中,这意味着该方法不会被调用。 我试图在应用程序启动时从UserDefaults加载一些数据,但它完全被忽略了。 我注意到的一件事是默认情况下它是一个private func
而不是一个func
。 如果我摆脱private
,我收到一个警告,“UIApplicationDelegate中有一个几乎相似的可选要求”。 有人可以向我解释这意味着什么以及private func
是否与被忽略的方法有关? 当我在模拟器中运行我的应用程序时,该方法是否应该被调用? 如果没有,我如何测试我的应用程序启动后是否正在检索数据? AppDelegate
中的所有其他方法都会被正常调用(例如, applicationDidEnterBackground
方法可以正常工作)。
删除您的方法签名并让Xcode自动完成它
我还遇到了didFinishLaunchingWithOptions
方法无法调用的问题。 我的function也标记为私有,看起来像这样
private func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
问题是这是旧的语法! 当我将项目从Swift 2.x转换为Swift 3时,显然对我来说,Xcode没有转换AppDelegate中的方法。 新语法如下所示
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool
您是否在其中一个ViewControllers
实现了didFinishLaunchingWithOptions
? 一个人不会调用此方法的自定义实现。 此方法在ApplicationDelegate
定义,并且一旦启动ApplicationDelegate
,它将始终被调用。 如果您尚未在任何ViewController
再次定义该方法,并且未调用AppDelegate
方法,则尝试重置模拟器。 从模拟器菜单Simulator -> Reset content and settings
。
如果编译器提示将didFinishLaunchingWithOptions
方法设为私有,则该方法的参数可能会导致错误。 应用程序的参数(_:didFinishLaunchingWithOptions :)委托方法现在桥接到Swift作为[UIApplicationLaunchOptionsKey:Any] ?,而不是[NSObject:AnyObject] ?. 因此,如图所示修改方法签名。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // ... }
for Swift~3.0用以下签名替换didFinishLaunchingWithOptions
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool { }
此方法在ApplicationDelegate中定义,并且一旦启动应用程序,它将始终被调用。 如果您尚未在任何ViewController中再次定义该方法,并且未调用AppDelegate中的方法,则尝试重置模拟器。
打开模拟器 – >菜单模拟器 – >重置内容和设置。
-(BOOL)application(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //.. }