私有func didFinishLaunchingWithOptions没被调用? (斯威夫特3)

时间:2016-10-06 06:02:18

标签: ios swift xcode launch

当应用程序第一次开始运行时,是否应该调用didFinishLaunchingWithOptions?我在这个方法中设置了一个断点,当我在模拟器中运行应用程序时,断点不会被命中,这意味着该方法不会被调用。我试图在应用程序启动时从UserDefaults加载一些数据,但它完全被忽略了。我注意到的一件事是,它默认为private func而不是func。如果我摆脱private,我会收到一条警告,“UIApplicationDelegate中有一个几乎相似的可选要求”。有人可以向我解释这意味着什么以及private func是否与被忽略的方法有关?当我在模拟器中运行我的应用程序时,该方法是否应该被调用?如果没有,我如何测试我的应用程序启动后是否正在检索数据? AppDelegate中的所有其他方法都会被正常调用(例如,applicationDidEnterBackground方法可以正常工作)。

6 个答案:

答案 0 :(得分:30)

删除您的方法签名并让Xcode自动填充

我还遇到了AppDelegate中的didFinishLaunchingWithOptions方法无法调用的问题。我的功能也标记为私有,看起来像这样

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

答案 1 :(得分:3)

  

用于Swift~3.0 用did替换didFinishLaunchingWithOptions   以下签名

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
}

答案 2 :(得分:2)

您是否在didFinishLaunchingWithOptions之一中实施了ViewControllers?一个人不会调用此方法的自定义实现。此方法在ApplicationDelegate中定义,并且一旦启动应用程序,它将始终被调用。如果您尚未在任何ViewController中再次定义该方法,并且未调用AppDelegate中的方法,请尝试重置模拟器。从模拟器菜单Simulator -> Reset content and settings

如果编译器提示将didFinishLaunchingWithOptions方法设为私有,则该方法的参数可能会导致错误。 应用程序的参数(_:didFinishLaunchingWithOptions :)委托方法现在作为[UIApplicationLaunchOptionsKey:Any]?而不是[NSObject:AnyObject]?桥接到Swift。因此,如图所示修改方法签名。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// ...
}

答案 3 :(得分:0)

此方法在ApplicationDelegate中定义,并且一旦启动应用程序,它将始终被调用。如果您尚未在任何ViewController中再次定义该方法,并且未调用AppDelegate中的方法,则尝试重置模拟器。

打开模拟器 - >菜单模拟器 - >重置内容和设置。

-(BOOL)application(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//..
}

答案 4 :(得分:0)

Swift 4.2的更新:

func application(
    _ application: UIApplication, 
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool

答案 5 :(得分:0)

从设备删除应用程序并重新启动Xcode在这里对我有用