Откройте определенный ViewController с помощью Siri Shortcut без сохранения состояния - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу открыть определенное UIViewController с помощью Siri Shortcut.Мое приложение имеет поток пользователя, как показано ниже:

Fake Splash Controller (Controller A) --> Welcome Screen (Controller B) --> Controller C --> Controller D

Цель: Я хочу открыть контроллер C с нуля в том же порядке (я имею в виду, приложение сначала открывает поддельный всплеск, затем B,затем C) с помощью Siri Shortcut. Поэтому восстанавливайте состояние при каждом запуске Siri Shortcut.Не получить старое состояние.

Отсутствует решение:

Класс для обработки ярлыка Siri:

class SiriController: NSObject {

public static func siriApplyShourcutEnabler(thumbnail: UIImage?) -> NSUserActivity {
    let siriActivityType = "com.adeveloper.myapp.myshortcut"
    let activity = NSUserActivity(activityType: siriActivityType)
    activity.persistentIdentifier =
        NSUserActivityPersistentIdentifier(siriActivityType)
    activity.title = "Do Something"
    let attributes = CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String)
    attributes.contentDescription = "You can use this shortcut to.."
    attributes.thumbnailData = thumbnail?.jpegData(compressionQuality: 1.0)
    activity.suggestedInvocationPhrase = "Nice shortcut"
    activity.isEligibleForSearch = true
    activity.isEligibleForPrediction = true
    activity.contentAttributeSet = attributes
    return activity

}
}

Контроллер поддельного представления всплеска:

 override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    setupUI()

    if #available(iOS 12.0, *) {
        self.userActivity = SiriController.siriApplyShourcutEnabler(thumbnail: nil)
        self.userActivity?.becomeCurrent()
    } else {
        // Fallback on earlier versions
    }}

AppDelegate:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
//controller.present(ApplyViewController(), animated: true, completion: nil)
if let unWrappedController = window?.rootViewController, unWrappedController is SplashViewController {
    //isComingFromSiri is a boolean I store on AppDelegate
    self.isComingFromSiri = true
    return true
} else {
    self.isComingFromSiri = false
    return false
}
}

Контроллер B (я проверяю, открывает ли пользователь приложение с помощью siriShortcut, если да, я открываю контроллер C:

override viewDidAppear() {
let delegate = UIApplication.shared.delegate as! AppDelegate
if(delegate.isComingFromSiri) {
let controller = ApplyViewController()
let navController = UINavigationController(rootViewController: controller)
delegate.isComingFromSiri = false
self.present(navController, animated: true, completion: nil)
}

Проблема: Теперь яможет сделать это с помощью решения, которым я поделился выше. Тем не менее, Я хочу показать всплывающее окно на Controller D, проверьте, хочет ли пользователь этот ярлык. Если да, мне нужно создать его с siriApplyShortCutEnabler, затем установитена self.userActivity. Однако, когда я это делаю, ЕСЛИ Я ПРАВИЛЬНО ПОНИМАЮ, приложение сохраняет свое состояние. Поскольку я получаю приватную информацию о контроллере C и Controller D. Я не могу сохранить состояние, когда приложение закрывается, все должнопропадать, и каждый раз, когда приложение открывается, нужно начинать заново.

Вопрос: Как установить self.userActivity на Controller D, но когда пользователь открывает приложение, никаких действий после контроллера C не происходитсохранен.

Пока я искал, есть вопрос, заданный в сообществе.Также получим userActivity в контроллере, где находится пользователь. Как использовать ярлыки Siri для отображения определенной страницы в моем приложении?

...