在 Swift 3 中检查启动选项

Posted

技术标签:

【中文标题】在 Swift 3 中检查启动选项【英文标题】:Checking launchOptions in Swift 3 【发布时间】:2016-10-18 15:48:21 【问题描述】:

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

    if let myLaunchOptions: NSDictionary = launchOptions as NSDictionary? 

我的整体代码是这样的。我知道 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)
        

我的崩溃日志在这里。

【问题讨论】:

投射到NSDictionary 有什么意义?它是 Swift 代码,将其保留为 Swift 字典。 崩溃的错误是什么? 如果您不知道数据类型,请使用以下行。 啊..对不起@rmaddy。我的错。是的。我会用字典。我习惯于 Objective-C 代码。我已更新以显示崩溃日志。 这没有显示错误。崩溃日志中应该有错误。 【参考方案1】:

您应该像这样检查和获取用户活动:

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

【讨论】:

我用过你的,它解决了我的问题。 Apple 现在批准我的应用程序。谢谢你。 我不认为这是完全正确的; .userActivityType 会从字典中返回一个 NSString。【参考方案2】:

我必须更新 @David Rodrigues 的解决方案才能在 Swift 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

【讨论】:

以上是关于在 Swift 3 中检查启动选项的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 - 在启动时加载多个 ViewController

Swift println()在编写代码时不显示自动完成选项

sublime text 3 安装插件和取消启动检查更新

swift 启动图片的设置

进程结束后又自动启动

以编程方式在 Swift 中的选项卡之间切换