在Swift中应用openURL

Bas*_*Man 6 appdelegate swift ios8

我遇到了Appdelegate方法OpenURL的问题.

我已经设置了导入的UTI和文档类型.但是当从邮件附件打开我的应用程序时,当我实施该方法时,应用程序会立即崩溃.

折旧的handleOpenURL有效,但不是OpenURL吗?

目前我在实现中没有代码,我只是返回true.

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject?) -> Bool {
    return true
}
Run Code Online (Sandbox Code Playgroud)

崩溃说 Thread 1: EXC_BAD_ACCESS (code-1, address-0x0)

我真的不想使用已弃用的方法.

Muh*_*raf 6

这个问题让我头疼了一个星期。
使用微信/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
Run Code Online (Sandbox Code Playgroud)

请注意,已弃用的版本正在使用 annotation:Any 如果您桥接到诸如微信之类的 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
}
Run Code Online (Sandbox Code Playgroud)

希望这有帮助。它也将成为我的功能参考。感谢 StackOverflow


Dav*_*rry 3

这是 Swift 编译器自动生成的方法签名与实际签名之间相当典型的签名不匹配现象。当您尝试将 nil 从 Objective-C 传递到 Swift 显式解包可选时,就会发生这种情况。将参数更改annotation为隐式解包,您应该 gtg。