Я пытаюсь разобраться с 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
(зачем Apple к этому? Зачем тогда им добавлять userInfo?) или я должен индексировать свою активность без Core Spotlight, но как в этом случае удалить активность из Spotlight?