在 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 中进行这项工作,因为 .userActivityType
是 NSString
。
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