设置userActivity时,我们必须覆盖updateUserActivityState

时间:2019-07-05 09:39:12

标签: ios swift cocoa-touch uiresponder nsuseractivity

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

1 个答案:

答案 0 :(得分:0)

  

但是,当我们只设置一次活动而从不更新活动时,我们应该   还总是必须实现updateUserActivityState吗?

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

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