我正在尝试在使用 iOS 6+ 和情节提要的应用程序中实现状态恢复,但我在寻找防止重复调用繁重方法的方法时遇到问题。
如果我只是启动应用程序,那么我需要在以下位置设置 UI viewDidLoad
:
- (void)viewDidLoad {
[super viewDidLoad];
[self setupUI];
}
这在正常的、非状态恢复的世界中运行良好。现在我添加了状态恢复,在恢复一些属性后,我需要使用这些属性更新 UI:
- (void)decodeRestorableStateWithCoder:(NSCoder *)coder {
[super decodeRestorableStateWithCoder:coder];
// restore properties and stuff
// [...]
[self setupUI];
}
所以现在发生的情况是首先setupUI
调用方法 from viewDidLoad
,然后再次调用 from decodeRestorableStateWithCoder:
。我没有看到我可以覆盖总是最后调用的方法。
这是方法调用的正常顺序:
- 从笔尖醒来
- viewDidLoad
- 视图将出现
- viewDidAppear
使用状态恢复时,这称为:
- 从笔尖醒来
- viewDidLoad
- decodeRestorableStateWithCoder
- 视图将出现
- viewDidAppear
我无法将调用setupUI
放入,viewWillAppear
因为这样每次您本地返回视图时也会执行它。
decodeRestorableStateWithCoder
如果在之前调用它会更方便,viewDidLoad
因为这样你就可以使用恢复的属性。viewDidLoad
可悲的是,情况并非如此,所以......当我知道我需要马上重新做一遍时,我怎么能阻止做这项工作decodeRestorableStateWithCoder
?