Я пытаюсь обернуть голову вокруг NSUserActivity
с, и я не совсем уверен, как правильно их использовать. Я правильно настроил свою 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?