1

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

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

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

当状态为脏时,应将 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)
}

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

例如,在设置活动一次时viewDidLoad

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()
}
4

1 回答 1

0

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

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

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

于 2019-09-24T09:12:43.880 回答