Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSUREActivity与核心聚光灯深度链接_Ios_Swift_Xcode_Corespotlight_Nsuseractivity - Fatal编程技术网

Ios NSUREActivity与核心聚光灯深度链接

Ios NSUREActivity与核心聚光灯深度链接,ios,swift,xcode,corespotlight,nsuseractivity,Ios,Swift,Xcode,Corespotlight,Nsuseractivity,我正在使用NSUserActivity和Core Spotlight为我的应用程序上的内容编制索引。 我之所以使用Core Spotlight,是因为我想在用户访问(打开)此内容之前对其编制索引 我面临的问题是AppDelegate方法: func应用程序(application:UIApplication,continue userActivity:NSUserActivity,restorationHandler:@escaping([Any]?)->Void)->Bool 基本上,us

我正在使用NSUserActivity和Core Spotlight为我的应用程序上的内容编制索引。 我之所以使用Core Spotlight,是因为我想在用户访问(打开)此内容之前对其编制索引

我面临的问题是AppDelegate方法:

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

基本上,
userActivity
在我的viewController中执行此操作时,仅包含正确的信息:

userActivity=myUserActivity

但如果我这样做,它就不起作用了:

CSSearchableIndex.default().indexSearchableItems(searchableItems)

通过使用第二种方法(Core Spotlight),我可以在Spotlight search中查看所有结果,但当我点击该项时,AppDelegate方法中没有任何信息

最糟糕的是:


po userActivity.activityType
“com.apple.corespottlightitem”

如果我打印activityType,而不是我自己的,我会得到这个


有什么建议吗?

当你的应用程序从CoreSpotlight结果启动时,你会得到一个
CSSearchableItemActionType

您需要通过检索
CSSearchableItemActivityIdentifier
来处理此类操作-此值将与您在将可搜索项目提交到索引时为其提供的标识符相匹配

比如:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    if userActivity.activityType == CSSearchableItemActionType {
        guard let selectedItem = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String else {
            return
        }
        // Do something with selectedItem
    }
}

从CoreSpotlight结果启动应用程序时,您会得到一个
CSSearchableItemActionType

您需要通过检索
CSSearchableItemActivityIdentifier
来处理此类操作-此值将与您在将可搜索项目提交到索引时为其提供的标识符相匹配

比如:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    if userActivity.activityType == CSSearchableItemActionType {
        guard let selectedItem = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String else {
            return
        }
        // Do something with selectedItem
    }
}

你的问题并不清楚,你期望看到什么。在任何情况下,在调用indexSearchableItems时,如果将searchableItem.identifier设置为某个唯一值,则可以稍后从userActivity.userInfo?[“kCSSearchableItemActivityIdentifier”]检索此值。“com.apple.corespottlightitem”的活动类型是正确的,并且是预期的。从您的问题来看,您不清楚您期望看到什么。在任何情况下,在调用indexSearchableItems时,如果将searchableItem.identifier设置为某个唯一值,则可以稍后从userActivity.userInfo?[“kCSSearchableItemActivityIdentifier”]检索此值。“com.apple.corespottlightitem”的活动类型是正确的,也是人们所期望的。哦,天哪,那金字塔般的厄运。使用逗号运算符、可选链接和
可选.map
/
可选.flatMap
!就这样!我没有正确地理解它,而是平等地对待核心聚光灯和用户活动。非常感谢。哦,上帝,那座末日金字塔。使用逗号运算符、可选链接和
可选.map
/
可选.flatMap
!就这样!我没有正确地理解它,而是平等地对待核心聚光灯和用户活动。非常感谢。