在Swift 3中检查launchOptions

Kha*_*inn 3 ios swift3

我已将我的代码转换为swift 3并且已提交到app store.当他们打开应用程序时,它会在第一时间崩溃.结果,我检查了我的崩溃日志,它在这一行崩溃了.

    if let myLaunchOptions: NSDictionary = launchOptions as NSDictionary? {
Run Code Online (Sandbox Code Playgroud)

我的整体代码是这样的.我知道launchOptions可能是零,甚至可能不是NSDictionary.这就是为什么我这样检查它并且它在那条线上失败了.我可以知道用swift 3检查/预防的其他方法吗?

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

    if let myLaunchOptions: NSDictionary = launchOptions as NSDictionary? {
        let test = myLaunchOptions[UIApplicationLaunchOptionsKey.userActivityDictionary] as! NSDictionary
        let userActivity = test["UIApplicationLaunchOptionsUserActivityKey"] as! NSUserActivity
        NSLog("test1:" + String(describing: userActivity))
        continueUserActivity(userActivity)
        }
Run Code Online (Sandbox Code Playgroud)

我的崩溃日志就在这里.

在此输入图像描述

小智 13

你应该检查并获得这样的用户活动:

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

    if let userActivityDictionary = launchOptions?[.userActivityDictionary] as? [UIApplicationLaunchOptionsKey : Any],
        let userActivity = userActivityDictionary[.userActivityType] as? NSUserActivity {
        continueUserActivity(userActivity)
    }

    return true
}
Run Code Online (Sandbox Code Playgroud)

  • 我不认为这是完全正确的。`.userActivityType`将从字典返回一个NSString。 (2认同)

sko*_*nos 8

我不得不为了让斯威夫特4这项工作,因为更新@大卫·罗德里格斯的解决方案.userActivityTypeNSString

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

    if let userActivityDict = launchOptions?[.userActivityDictionary] as? [AnyHashable : Any],
        let userActivity = userActivityDict["UIApplicationLaunchOptionsUserActivityKey"] as? NSUserActivity {
        continueUserActivity(userActivity)
    }

    return true
}
Run Code Online (Sandbox Code Playgroud)