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