【问题标题】:When setting an userActivity do we have to override updateUserActivityState设置 userActivity 时,我们是否必须覆盖 updateUserActivityState
【发布时间】:2019-11-15 22:25:59
【问题描述】:

updateUserActivityState 上的文档对我来说有点模糊。

https://developer.apple.com/documentation/uikit/uiresponder/1621095-updateuseractivitystate

子类覆盖此方法以更新给定用户活动的状态。您应该使用其 addUserInfoEntries(from:) 方法将表示用户活动的状态添加到 NSUserActivity 对象中。

当状态为dirty时,应将NSUserActivity的needsSave属性设置为true,该方法会在适当的时候被调用。

所以我们这样做的时候会调用这个方法:

open override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    self.userActivity?.needsSave = true
}

然后我们可以相应地更新活动:

override func updateUserActivityState(activity: NSUserActivity) {

  activity.addUserInfoEntriesFromDictionary(someInfo)
  super.updateUserActivityState(activity)
}

但是当我们只设置一次activity并且从不更新它时,我们是否也必须始终实现updateUserActivityState

例如在viewDidLoad中设置一次activity时:

override open func viewDidLoad() {
    super.viewDidLoad()

    let activity = NSUserActivity(activityType: "com.myApp")
    activity.title = "Viewing"
    activity.userInfo = ["myApp.item.key": ["Some", "Things"]]
    self.userActivity = activity
    self.userActivity?.becomeCurrent()
}

【问题讨论】:

    标签: ios swift cocoa-touch uiresponder nsuseractivity


    【解决方案1】:

    但是当我们只设置一次活动并且从不更新它时,我们应该 也总是要实现updateUserActivityState?

    如果 NSUserActivity 对象从不更改,并且在创建时已完全配置,则无需重写 UIResponder.updateUserActivityState 方法。

    但是,为了保持一致性和面向未来(如果您确实使该用户活动对象可变),应用程序可能仍希望在响应者链收到更改通知时使用 updateUserActivityState 来填充活动。

    【讨论】:

      猜你喜欢
      • 2021-09-01
      • 2018-02-05
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 2019-05-26
      • 2019-03-17
      相关资源
      最近更新 更多