swift - 如何从 Spotlight 索引和取消索引 NSUserActivities
问题描述
我正试图将头绕在NSUserActivity
s 周围,但我不完全确定如何正确使用它们。我已经正确设置了我的 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 中删除活动?
解决方案
我只发现了一件事:在苹果文档中的domainIdentifier
属性CSSearchableAttributeSet
听起来你应该使用这个属性来删除NSUserActivity
指定域标识符以将项目组合在一起并便于从索引中删除项目组。例如,要删除用户活动,您可以在 NSUserActivity 对象的 contentAttributeSet 属性上设置此属性,然后在 default() 上调用 deleteSearchableItems(withDomainIdentifiers:completionHandler:)。
推荐阅读
- haskell - 列表中的 isContain 函数
- elasticsearch - 如何配置写入优化且资源消耗最少的集群
- php - 如何使用 Office365 REST API 发送邮件?
- c# - C# Convert.ToDouble 输入字符串在 Windows 服务中的格式不正确
- django - 尝试在 Django 2 Admin 中保存多个文件
- mongodb - 填充子文档的猫鼬限制和排序
- c# - 为什么对值类型数组求和比对引用类型数组求和要慢?
- javascript - 更改src后获取图片的高度
- java - 无法从 PMD 中排除某些规则
- c - C - 我不明白为什么这段代码没有输出我选择的值。(指针)