【问题标题】:Using spotlight in iOS app with deployment target iOS 8在 iOS 应用程序中使用 Spotlight 和部署目标 iOS 8
【发布时间】:2018-09-29 17:51:19
【问题描述】:

我的 iOS 应用程序的最小部署目标设置为 iOS 8.0,我想在其中启用聚光灯搜索。我了解 Spotlight 搜索只能在 iOS 9 及更高版本中使用。这就是为什么在我的 AppDelegate 中我使用 available

@available(iOS 9.0, *)
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    if userActivity.activityType == CSSearchableItemActionType {
        if let uniqIdentifier = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String {
            print(uniqIdentifier)
        }
    }
    return true
}

Xcode 给了我这个错误

协议“UIApplicationDelegate”需要 'application(_:continue:restorationHandler:)' 在 iOS 上可用 8.0 及更高版本

我能用它做什么

【问题讨论】:

  • 我认为您没有正确使用@available。你检查过这个吗? raywenderlich.com/139077/availability-attributes-swift
  • 我对 AppDelegate 中的一些其他方法使用相同的方式,这很好。我在下面找到了解决方案。
  • 是的,我已经检查过了,太好了:)

标签: swift ios8 appdelegate corespotlight


【解决方案1】:

我找到了解决方案,所以我决定发布它,因为它可能对其他开发人员有用。导入 CoreSpotlight 后

import CoreSpotlight

如果你的目标是 iOS 8.0 和更新版本,你应该添加 application(_:continue:restorationHandler:) 方法。但由于 'CSSearchableItemActionType' 仅适用于 iOS 9.0 或更高版本,您应该在方法中添加版本检查。

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

    if #available(iOS 9.0, *) {
        if userActivity.activityType == CSSearchableItemActionType {
            if let uniqIdentifier = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String {
                print(uniqIdentifier)
            }
        }
    }
    return true
}

【讨论】:

    猜你喜欢
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多