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()
}
答案 0 :(得分:0)
但是,当我们只设置一次活动而从不更新活动时,我们应该 还总是必须实现updateUserActivityState吗?
如果NSUserActivity对象从不更改,并且在创建时已完全配置,则无需覆盖UIResponder.updateUserActivityState方法。
但是,为了保持一致性和面向未来(在您确实使该用户活动对象可变的情况下),当响应者链收到更改通知时,应用程序仍可能希望使用updateUserActivityState来填写活动。