【问题标题】:application openURL in SwiftSwift 中的应用程序 openURL
【发布时间】: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 参数。如果您想将此添加为答案,我会接受。再次感谢

标签: swift ios8 appdelegate


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

希望对您有所帮助。它也将成为我在功能中的参考。感谢 StackOverflow

【讨论】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-10
        相关资源
        最近更新 更多