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

2024-05-03

注意:我已经弄清楚了大部分内容 - 请参阅最后的更新。还是有些迷茫。

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

在当前的文档中,该方法据说是:

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

这与我在 swift header 界面中看到的略有不同。其中,restorationHandler 中的返回类型是 Swift.Void。

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

提供 Objective-C 方法“application:continue:restorationHandler:” 通过方法 'application(_:continue:restorationHandler:)' 不匹配 需求的选择器 ('应用程序:继续用户活动:恢复处理程序:')

我意识到编译器警告现在不太好,但我认为这意味着它找到了 Obj-C 方法签名,但不知何故我的参数不太匹配。

我不知道还能去哪里。它与那里的东西相匹配 - 但是某物是错的。随机猜测和检查还没有帮助我。

有趣的是,自动完成给了我一个不同的方法签名:

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

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

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

我还在 WWDC 视频中的 What's New With Search 中看到了协议方法签名的另一个版本。我尝试了一下,它编译了,但也没有触发。

更进一步来说,这是我在 Swift 3 转换工具完成后得到的签名。它编译了,但从聚光灯下启动时没有被触发:

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

- - 更新 - - -

好的。所以上面提到的第一个方法签名是正确的。问题是我在 AppDelegate 的扩展中定义它。这在 Swift 2.x 中运行良好。

我已经把它移上去,一切都很好。但我想更好地理解为什么在从扩展实现协议方法时会出现这些编译错误。它不再符合协议一致性吗?如果我尝试将其添加到扩展中,我会收到一条错误,表明它是重复的,所以我认为这并不完全是这样。


最初的问题是关于为什么 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 的扩展中编译。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 Swift 3 / iOS 10 中触发 continueUserActivity 的相关文章

  • 在 iOS 上使用 Web 服务的最佳方式?

    我想构建一个 iOS 应用程序 让您登录到网络服务 之后 应用程序将 当用户选择时 通过 https 发送登录名 密码以及请求的变量 例如 在请求 新闻更新 后 它将收到 XML 格式的请求信息 类似于
  • 为什么在授予用户权限时,UIUserNotificationType.None 在当前设置中返回 true?

    我正在编写一种方法来检查当前用户设置是否包含某些通知类型 当检查当前设置是否包含 UIUserNotificationsType None 时 无论授予权限还是拒绝权限 它都会返回 true 有谁知道这是为什么吗 func register
  • SwiftUI:状态栏颜色

    有没有办法将 SwiftUI 视图的状态栏更改为白色 我可能错过了一些简单的东西 但我似乎找不到在 SwiftUI 中将状态栏更改为白色的方法 到目前为止我只看到 statusBar hidden Bool 状态栏文本 色调 前景色可以通过
  • Swift Codable 将空 json 解码为 nil 或空对象

    这是我的代码 class LoginUserResponse Codable var result String var data LoginUserResponseData var mess String public class Log
  • Parse.com 和 Facebook 登录,运行无限循环

    我将 Parse 和 Facebook iOS SDK 都更新到了最新版本 当我尝试使用 Facebook 登录时 我的应用程序崩溃了 从调试器中我可以看到它正在无限循环中调用 3 4 个方法 我的登录代码如下所示 void openSes
  • 在 SwiftUI 中使用分段式选取器在两个页面之间滑动

    我有一个Picker with pickerStyle SegmentedPickerStyle 使其成为分段控件 我想让页面在之间平滑滑动 而不是使用条件语句替换视图 这是我迄今为止所做的 gif 这是到目前为止的代码 由if 而不是在不
  • 自定义 UITableViewCell 选择样式?

    当我点击我的UITableViewCell 当我单击单元格时 背景部分 我的背景图像未覆盖的区域 会变成蓝色 另外 所有的UILabel单击时单元格上的 s 变为白色 这就是我想要的 然而 我不想要的是当我点击它时的蓝色背景 但如果我这样做
  • 在带有 Storyboard 的 XCode 4 中以模态方式推送视图时,出现“对开始/结束外观转换的不平衡调用”警告

    在网上进行了一些研究但没有成功后 我来这里向您询问有关我的警告的问题 实际上 我有一个带有导航控制器的视图 V1 我想在 V1 完成加载时推送模态视图 V2 所以我用performSegueWithIdentifier方法 我正在使用故事板
  • 如何解决 CoreData mogenerator 未找到问题

    我收到如下所示的错误 我不知道我错过了什么 我该如何解决这个问题 如下图所示 Users nischalhada Documents XcodePro mnepalnews revisited 2 0 CoreData mogenerato
  • 如何将字符串日期转换为 NSDate?

    我想转换字符串 2014 07 15 06 55 14 198000 00 00 to an NSDate在斯威夫特 尝试这个 let dateFormatter NSDateFormatter dateFormatter dateForm
  • 在iOS上,“添加到主页”缓存保存在哪里,如何清除它?

    我正在 iPad iOS v7 上制作一个 html5 游戏 当我将其添加到主页时 它非常顽固地释放缓存 如果我在 Safari 中查看它 这会按照您所期望的方式工作 如果我刷新一次或两次 页面就会以最新状态缓存 但在主页上却是另一回事 它
  • 个人帐户开发者之间的 Apple 开发/分发证书

    我一直在到处寻找有关处理证书的正确答案 想象一下以下帐户 Joe拥有个人 Apple 帐户 但他根本不会编码 他只是发布了该应用程序并将其称为自己的 Bob还有一个个人 Apple 帐户 Bob 是一位编码专家 Joe 付费让他开发他的第一
  • 检测 AvPlayer 何时切换比特率

    在我的应用程序中 我使用 AVPlayer 通过 HLS 协议读取一些流 m3u8 文件 我需要知道在流会话期间 客户端切换比特率多少次 我们假设客户端的带宽正在增加 因此客户端将切换到更高比特率的段 AVPlayer能检测到这个开关吗 T
  • 我怎样才能勾勒出文本字体?

    我想在边框 轮廓 中显示另一种颜色的文本 我正在尝试使用在 MapOverlayView 中显示文本 text drawAtPoint CGPointMake 0 30 withFont UIFont fontWithName Helvet
  • 防止 AlertView 被解雇

    任何人都可以帮助我防止在其按钮单击事件上解雇警报视图吗 我有一个 textview 作为我的alertView 的子视图 如果 textview 值为 nil 我不想关闭它 因为这是一个非常老的问题 但我得到了一个解决方案 并且如果其他开发
  • 致命错误:在字典中发现“地理编码地标”类型的重复键。 (Mapbox 地理编码器)

    我引用 这通常意味着要么该类型违反了 Hashable 的要求 要么此类字典的成员在插入后发生了变化 我正在使用 Mapbox Geocoder 当发生此运行时错误时 我的 XCode 将我带到线程 1 0 swift runtime on
  • 指定访问组时出现 KeychainItemWrapper 错误

    相当长一段时间以来 我一直在使用 KeychainItemWrapper 的 ARC 版本成功读取和写入私有钥匙串项目 我现在正在努力将我的 iOS 应用程序转换为使用共享访问组 以便我的 2 个共享相同应用程序前缀的应用程序可以访问钥匙串
  • WhatsApp 显示警告“此项目无法共享。请选择其他项目。”对于 iOS 应用程序。

    我正在开发一个 iOS 应用程序 在该应用程序中 我有社交共享功能 并且社交共享功能使用深度链接来共享 URL 该网址共享对于所有应用程序都运行良好 除了WhatsApp 它会显示一个警报弹出窗口 此项目无法共享 请选择其他项目 以下是我的
  • SKNode 上的 runAction 未完成

    我使用 NSOperation 子类来获取串行执行SKAction正如这个问题中所描述的 如何在 Swift 中子类化 NSOperation 以将 SKAction 对象排队以进行串行执行 https stackoverflow com
  • 分发内部业务 IOS 应用程序

    我遇到了 IOS 应用程序分发的一个令人困惑的部分 因此 我需要简单细分一下我的限制 即仅将我的应用程序分发给我的员工 同事或任何被视为 内部 的人 这是表明我不希望该应用程序出现在应用程序商店中的另一种方式 我的情况是我为几家公司开发 他

随机推荐