2

我花了很多时间来寻找NSUserActivity优于CoreSpotlight的好处,无论我实际上找不到任何东西。

实际上,它无法索引我们通过NSUserActivity设置的项目。我在下面附上了我的片段,它应该按照苹果文档工作,但它不会。

        let personName = "Jon Doe"
        let activity = NSUserActivity(activityType: "com.SearchAPIs.test”)
        activity.userInfo = ["name": "Jon Doe"]
        activity.title = person.name
        let keywords = personName.componentsSeparatedByString(" ")
        activity.keywords = Set(keywords)
        activity.eligibleForSearch = true
        activity.eligibleForPublicIndexing = true
        activity.expirationDate = NSDate().dateByAddingTimeInterval(16666600)
        activity.becomeCurrent()

我想找到答案

为什么我们需要使用NSUserActivity进行搜索,因为它可以通过CoreSpotlight 实现

4

1 回答 1

4

根据苹果文档

为了保证活动及其元数据被索引,您必须持有对该活动的强引用,直到它被添加到索引中。有两种方法可以做到这一点: 第一种方法是将活动分配给创建活动的控制器对象中的属性。第二种方法是使用 UIResponder 对象的 userActivity 属性。如果使用第二种方式,则需要在updateUserActivityState:方法中设置元数据——比如userInfo属性中的信息;否则,您在活动上设置的元数据将不会被持久化。

您的活动在被索引之前被解除分配,最好使用self.

你的第二个问题的答案对我来说仍然是个谜。

也许它就像性能,索引中的项目数量,重要的是CoreSpotlight不提供的公共索引。我们必须再等一会儿才能得到您问题的答案。

于 2015-08-25T12:11:56.777 回答