观看操作系统1.0.1 changed the lifecycle for page-based apps:现在调用willActivate
/ didActivate
以便下一页预加载它。
我以前在我的每个页面的updateUserActivity:userInfo:webpageURL:
方法中都调用了willActivate
,为每个页面提供了不同的userInfo
。但是现在userInfo
被willActivate
中的同一方法调用了下一页。
知道怎么解决这个问题吗?
答案 0 :(得分:0)
我最后在willActivate
中将计时器安排了1秒,然后在didActivate
中使计时器无效。当计时器触发时,它会调用updateUserActivity:userInfo:webpageURL:
。我对任意1秒间隔不太满意......我先尝试0.5秒,但那太短了(我觉得WatchKit真的很慢?)。
答案 1 :(得分:0)
我认为我有更好的解决方案。 它包括在每个页面控制器中维护一个Bool,告诉控制器是否处于活动状态(显示),并保持需要更新到OS的NSUserActivity的值
<ui:repeat var="x" value="#{testController.createAndReturnHashmap()}">
#{x.qualifiedProduct.abstractProductId},#{x.qualifiedProduct.abstractProductCode}
<ui:repeat var="dt" value="#{x.dates}">
#{dt}
</ui:repeat>
</ui:repeat>
现在,您可以通过简单地为currentUserActivity分配值,在接口控制器代码中随时“标记”您的用户活动。例如,它可以在awakeWithContext:方法
中private var isActive:Bool = false {
didSet(oldValue) {
if oldValue != isActive {
resolveHandoff()
}
}
}
private var currentUserActivity: NSUserActivity? {
didSet(oldUserActivity) {
if oldUserActivity == nil && currentUserActivity != nil
|| oldUserActivity != nil && currentUserActivity == nil
|| oldUserActivity != currentUserActivity {
resolveHandoff()
}
}
}
override func willActivate() {
super.willActivate()
self.isActive = true
}
override func didDeactivate() {
super.didDeactivate()
self.isActive = false
}
private func resolveHandoff() {
if !self.isActive {
return
}
if let activity = currentUserActivity {
self.updateUserActivity(activity.activityType, userInfo: activity.userInfo, webpageURL: nil)
} else {
self.invalidateUserActivity()
}
}
仅当设置了currentUserActivity且控制器处于活动状态(显示)时,才会报告用户活动。 请注意,上面的实现方式允许您通过在控制器处于活动状态时设置self.currentUserActivity = nil来使invalidAserActivity无效。