Swift 中的应用程序 openURL
Posted
技术标签:
【中文标题】Swift 中的应用程序 openURL【英文标题】:application openURL in Swift 【发布时间】:2014-10-03 11:41:49 【问题描述】:我在使用 Appdelegate 方法 OpenURL 时遇到问题。
我已经设置了我的导入 UTI 和文档类型。但是从邮件附件打开我的应用程序时,当我实现该方法时,应用程序会立即崩溃。
折旧的handleOpenURL 有效,但OpenURL 无效?
目前我在实现中没有代码,只是返回 true。
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject?) -> Bool
return true
崩溃说Thread 1: EXC_BAD_ACCESS (code-1, address-0x0)
我真的不想使用已弃用的方法。
【问题讨论】:
您可以尝试将sourceApplication
参数设置为隐式展开的可选参数,因为这是方法签名之间的签名不匹配和尝试将 nil 传递给非可选参数的典型情况。当然,这也表明了数千个其他可能的错误,因为它只是表明 abort()
被调用...也可能是 annotation
参数需要被隐式解包而不是显式解包。想多了,其实可能性更大。
谢谢大卫,你是对的,它实际上是 sourceApplication 参数。如果您想将此添加为答案,我会接受。再次感谢
【参考方案1】:
这个问题让我头疼了一个星期。 使用微信 / LinkedIn 等社交媒体登录后,我的应用程序不断崩溃。但 Facebook 和 Google 登录工作正常。
我注意到我的应用在微信应用确认登录后会一直崩溃并进入前台。并出现BAD EXCESS错误。我已尝试在 AppDelegate 上删除我的 应用程序打开 url 方法,应用程序不会崩溃,但社交媒体登录操作不起作用。所以我发现我的问题出在特定的方法上。在网上搜索后,我发现我使用了 ApplicationOpenUrl 的弃用方法 作为来自 https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623073-application
的参考func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool
return true
// this method is deprecated in ios 9 https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623073-application
请注意,已弃用的版本正在使用注释:如果您已桥接到诸如微信之类的 Obj-c 框架,则会导致问题。 所以我所做的是,我将我的代码换成新的格式
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String
let annotation = options[UIApplicationOpenURLOptionsKey.annotation]
let application = app
return true
希望对您有所帮助。它也将成为我在功能中的参考。感谢 ***
【讨论】:
【参考方案2】:这是相当典型的 Swift 编译器自动生成的方法签名与实际签名之间的签名不匹配。当您尝试将 nil 从 Objective-C 传递到 Swift 显式解包的可选项时,就会发生这种情况。将 annotation
参数更改为隐式展开,您应该是 gtg。
【讨论】:
【参考方案3】:Swift 5 版本的 Muhammad Asyraf 的回答:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool
let sourceApplication = options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String
let annotation = options[UIApplication.OpenURLOptionsKey.annotation]
return true
【讨论】:
以上是关于Swift 中的应用程序 openURL的主要内容,如果未能解决你的问题,请参考以下文章
NSWidgetExtensionContext openURL Swift
'openURL'在iOS 10.0中已被弃用:请使用openURL:options:completionHandler:而不是在Swift 3中[重复]