【问题标题】:How to index and deindex NSUserActivities from Spotlight如何从 Spotlight 索引和取消索引 NSUserActivities
【发布时间】:2020-02-10 21:38:16
【问题描述】:

我正试图围绕NSUserActivitys 进行思考,但我并不完全确定如何正确使用它们。我已经正确设置了我的 NSUserActivity:

let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String)
attributeSet.title = "Title"
attributeSet.contentDescription = "Description"    

let activity = NSUserActivity(activityType: ActivityType.activity.rawValue)
activity.persistentIdentifier = ActivityIdentifier.activity.rawValue
activity.title = "Title"
activity.requiredUserInfoKeys = ["Key"]
activity.userInfo = ["Key": data]
activity.isEligibleForSearch = true
activity.contentAttributeSet = attributeSet

self.userActivity = activity
self.userActivity!.becomeCurrent()

现在活动通过becomeCurrent() 方法被索引。当我在 Spotlight 中单击活动时,一切正常,并且可以使用 userInfo 属性恢复活动。

但是,一旦使用(恢复)活动,如何从 Spotlight 中删除活动?在这个post 中,用户建议使用deleteAllSavedUserActivities(completionHandler:) 可以工作但我不能使用,因为我不想删除所有活动或deleteSavedUserActivities(withPersistentIdentifiers:completionHandler:) 不工作。对于first method,文档说明如下,但对于second method,这并不适用:

删除 Core Spotlight 存储的所有用户活动...

相反,我可以像这样使用 Core Spotlight API 索引活动:

let item = CSSearchableItem(uniqueIdentifier: ActivityIdentifier.activity.rawValue, domainIdentifier: "DomainID", attributeSet: attributeSet)
CSSearchableIndex.default().indexSearchableItems([item]) { error in
    if error != nil {
        print(error!)
    } else {
        print("successfully indexed item")
    }
}

并使用deleteSearchableItems(withIdentifiers:completionHandler:) 方法删除它们。问题是,我必须设置我的attributeSetrelatedUniqueIdentifier,然后一旦我尝试恢复活动(regarding post),userInfo 就会为空。

那么我应该怎么做,我应该同时使用 Core Spotlight 和 NSUserActivity 并使用 CSSearchableItemAttributeSet 来保存数据而不是使用 userInfo (苹果为什么要这样做?,他们为什么要添加 userInfo 呢?)还是应该在没有 Core Spotlight 的情况下为我的活动编制索引,但在这种情况下如何从 Spotlight 中删除活动?

【问题讨论】:

    标签: swift indexing nsuserdefaults corespotlight


    【解决方案1】:

    我只发现了一件事:在CSSearchableAttributeSetdomainIdentifier 属性的apple documentation 中,听起来您应该使用此属性来删除NSUserActivity

    指定域标识符以将项目组合在一起并使其 易于从索引中删除项目组。例如,要删除 用户活动,您可以在 contentAttributeSet 上设置此属性 NSUserActivity 对象的属性,然后调用 deleteSearchableItems(withDomainIdentifiers:completionHandler:) 上 默认()。

    【讨论】:

      猜你喜欢
      • 2016-06-22
      • 2014-01-10
      • 2023-04-01
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 2016-12-06
      • 1970-01-01
      相关资源
      最近更新 更多