【问题标题】:Checking launchOptions in Swift 3在 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 代码。我已更新以显示崩溃日志。
  • 这没有显示错误。崩溃日志中应该有错误。

标签: ios swift3


【解决方案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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 2017-07-29
    相关资源
    最近更新 更多