首页 > 解决方案 > 如何从 Spotlight 索引和取消索引 NSUserActivities

问题描述

我正试图将头绕在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 中删除活动?在这篇文章中,用户建议使用其中一个可以使用deleteAllSavedUserActivities(completionHandler:),但我不能使用,因为我不想删除所有活动或deleteSavedUserActivities(withPersistentIdentifiers:completionHandler:)哪个不工作。对于第一种方法,文档说明如下,但是对于第二种方法,这并不适用:

删除 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:)方法删除它们。问题是,一旦我尝试恢复活动(关于帖子relatedUniqueIdentifier),我必须设置我的attributeSet,然后将是空的。userInfo

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

标签: swiftindexingnsuserdefaultscorespotlight

解决方案


我只发现了一件事:在苹果文档中的domainIdentifier属性CSSearchableAttributeSet听起来你应该使用这个属性来删除NSUserActivity

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


推荐阅读