无法在Swift 3 / iOS 10中触发continueUserActivity

jeffro37

注意:我已经弄清楚了大部分内容-请参阅最后的更新。仍然有些混乱。

我正在尝试在Swift 3下的Xc8b6中实现NSUserActivity处理,并且遇到处理程序协议方法的方法签名有问题。

在当前文档中,该方法被称为:

func application(_ application: UIApplication, 
                 continue userActivity: NSUserActivity, 
       restorationHandler: @escaping ([Any]?) -> Void) -> Bool

这与我在swift标头界面中看到的仅略有不同。在那里,restoreHandler中的返回类型是Swift.Void。

当我尝试这个时,我得到的错误是:

方法'application(_:continue:restorationHandler :)'提供的Objective-C方法'application:continue:restorationHandler:'与需求的选择器不匹配('application:continueUserActivity:restorationHandler:')

我意识到编译器警告现在还不太好,但是我认为这表示已经找到了Obj-C方法签名,但是我的参数不完全匹配。

我不确定还有其他地方。它匹配那里的东西-但什么是错的。随机猜测和检查对我没有帮助。

有趣的是,自动完成功能为我提供了不同的方法签名:

public func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: ([Any]?) -> Void) -> Bool

关于这一点的一件好事是它可以编译。不太好的事情是,当我从Spotlight中选择一个索引项目并点击以启动应用程序时,它不会被触发。

显然,我的NSUserAction正确识别了该应用程序并启动了它。有什么我可能会在这里丢失的东西,它不会触发restoreHandler吗?请注意,这是从在iOS 9下运行良好的项目转换而来的。

我还在WWDC视频中的“搜索的新功能”中看到了协议方法签名的另一个版本。我试过了,它编译了但没有触发。

只是为了解决问题,这是我在Swift 3转换工具完成后所拥有的签名。它已编译,但从聚光灯下启动时并未被触发:

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]) -> Void) -> Bool

- - 更新 - - -

好的。因此,上面提到的第一个方法签名是正确的。问题是我在AppDelegate的扩展中定义了它。在Swift 2.x中,此功能运行良好。

我已经把它移了,一切都很好。但是,我想更好地理解为什么从扩展中实现协议方法时会出现这些编译错误。它不再通过协议一致性进行携带吗?如果尝试将其添加到扩展名中,则会收到一条错误消息,指示它是重复项,因此我认为并非如此。

jeffro37

最初的问题是关于为什么未调用continueUserActivity(以及正确的签名是什么),因此我将在此处回答,以更清楚地说明出了什么问题。

正确的签名是我在帖子顶部放的:

func application(_ application: UIApplication, 
                 continue userActivity: NSUserActivity, 
       restorationHandler: @escaping ([Any]?) -> Void) -> Bool

请记住,此签名与Xc8b6中自动完成功能所提供的签名不同,因此我怀疑其他人可能会这样做并从此响应中受益。

我最初的问题是它没有编译,因为我是在扩展中进行的。为了清楚起见:

extension AppDelegate {
  func application(_ application: UIApplication,
                   continue userActivity: NSUserActivity,
                   restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    return true
  }
}

这适用于任何较旧的iOS 9 / Swift 2.x项目(具有较旧的continueUserActivity签名)。我还是不太肯定为什么,但是它不会在Xc8 / Swift 3的扩展中编译。

我将其移至类范围,现在可以正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ios 10+,Swift 3+ - 无法从 Singleton 实例中关闭 UIAlertController

来自分类Dev

Swift无法导入Sqlite3 iOS

来自分类Dev

无法在 CoreData 子类中创建新属性?iOS8 Swift3

来自分类Dev

无法在 iOS Swift 3 中的 UIBarButtonItem 单击上添加目标和运行功能

来自分类Dev

在iOS 10中添加本地通知-Swift 3

来自分类Dev

Firebase setValue在IOS 10,Swift 3中不起作用

来自分类Dev

注册推送通知Swift 3 + iOS 10

来自分类Dev

iOS声音无法在Swift中播放

来自分类Dev

无法在iOS Swift中获得SecKey UnsafeMutablePointer

来自分类Dev

API无法在Swift for iOS中显示数据

来自分类Dev

无法在iOS Swift中获得SecKey UnsafeMutablePointer

来自分类Dev

无法从 Java 在 iOS(Swift) 中解密(AES)

来自分类Dev

Swift3 iOS-如何使UITapGestureRecognizer触发功能

来自分类Dev

无法在Swift 3中创建范围

来自分类Dev

我无法在Swift 3中定义XMLParser

来自分类Dev

无法在Swift 3中转换AnyHashable

来自分类Dev

无法在Swift 3中转换NSURLSession

来自分类Dev

无法在 swift 3 中更改按钮的图像?

来自分类Dev

Swift 3 / iOS 10 Today视图小部件

来自分类Dev

iOS 10和Swift 3转换问题

来自分类Dev

导航未出现Xcode 8.1 iOS 10 Swift 3

来自分类Dev

Swift 3、iOS 10 - 错误:线程 1 信号 Sigabrt (SPRITEKIT)

来自分类Dev

如何在iOS 10 Swift 3中初始化NSFetchedResultsController

来自分类Dev

iOS10 / Swift 3中的NSFetchedResultsController-转换后仍然出现错误消息

来自分类Dev

如何在ios 10 swift 3中存储touchid指纹数据

来自分类Dev

在Swift 3中的iOS9和iOS10上检测屏幕锁定或按下主屏幕按钮

来自分类Dev

iOS标签无法使用Swift中的功能更新文本

来自分类Dev

Fabric插件将无法在Xcode iOS Swift App中启动

来自分类Dev

无法在Swift Project中建立Facebook ios SDK

Related 相关文章

  1. 1

    ios 10+,Swift 3+ - 无法从 Singleton 实例中关闭 UIAlertController

  2. 2

    Swift无法导入Sqlite3 iOS

  3. 3

    无法在 CoreData 子类中创建新属性?iOS8 Swift3

  4. 4

    无法在 iOS Swift 3 中的 UIBarButtonItem 单击上添加目标和运行功能

  5. 5

    在iOS 10中添加本地通知-Swift 3

  6. 6

    Firebase setValue在IOS 10,Swift 3中不起作用

  7. 7

    注册推送通知Swift 3 + iOS 10

  8. 8

    iOS声音无法在Swift中播放

  9. 9

    无法在iOS Swift中获得SecKey UnsafeMutablePointer

  10. 10

    API无法在Swift for iOS中显示数据

  11. 11

    无法在iOS Swift中获得SecKey UnsafeMutablePointer

  12. 12

    无法从 Java 在 iOS(Swift) 中解密(AES)

  13. 13

    Swift3 iOS-如何使UITapGestureRecognizer触发功能

  14. 14

    无法在Swift 3中创建范围

  15. 15

    我无法在Swift 3中定义XMLParser

  16. 16

    无法在Swift 3中转换AnyHashable

  17. 17

    无法在Swift 3中转换NSURLSession

  18. 18

    无法在 swift 3 中更改按钮的图像?

  19. 19

    Swift 3 / iOS 10 Today视图小部件

  20. 20

    iOS 10和Swift 3转换问题

  21. 21

    导航未出现Xcode 8.1 iOS 10 Swift 3

  22. 22

    Swift 3、iOS 10 - 错误:线程 1 信号 Sigabrt (SPRITEKIT)

  23. 23

    如何在iOS 10 Swift 3中初始化NSFetchedResultsController

  24. 24

    iOS10 / Swift 3中的NSFetchedResultsController-转换后仍然出现错误消息

  25. 25

    如何在ios 10 swift 3中存储touchid指纹数据

  26. 26

    在Swift 3中的iOS9和iOS10上检测屏幕锁定或按下主屏幕按钮

  27. 27

    iOS标签无法使用Swift中的功能更新文本

  28. 28

    Fabric插件将无法在Xcode iOS Swift App中启动

  29. 29

    无法在Swift Project中建立Facebook ios SDK

热门标签

归档