【发布时间】: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:) 方法删除它们。问题是,我必须设置我的attributeSet 的relatedUniqueIdentifier,然后一旦我尝试恢复活动(regarding post),userInfo 就会为空。
那么我应该怎么做,我应该同时使用 Core Spotlight 和 NSUserActivity 并使用 CSSearchableItemAttributeSet 来保存数据而不是使用 userInfo (苹果为什么要这样做?,他们为什么要添加 userInfo 呢?)还是应该在没有 Core Spotlight 的情况下为我的活动编制索引,但在这种情况下如何从 Spotlight 中删除活动?
【问题讨论】:
标签: swift indexing nsuserdefaults corespotlight