知道NSViewController在窗口内部存档用于恢复(用户界面保存)目的的最佳实践是什么?我试过在窗口控制器的encodeRestorableStateWithCoder:方法中存档它 只是为了发现视图控制器在restoreStateWithCoder:被调用时没有被取消存档 .
// NSWindowController subclass
-(void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
[super encodeRestorableStateWithCoder:coder];
NSViewController* contentViewController = self.contentViewController;
if (contentViewController) {
[coder encodeObject:contentViewController forKey:BSContentViewControllerResumeKey];
}
}
-(void)restoreStateWithCoder:(NSCoder *)coder
{
[super restoreStateWithCoder:coder];
NSViewController* contentViewController = [coder decodeObjectForKey:BSContentViewControllerResumeKey];
if (contentViewController) {
// somehow this never get executed since contentViewController always comes out nil
self.contentViewController = contentViewController;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,此视图控制器包含管理其自己的子视图的其他视图控制器,因此在NSCoder实例中需要一些范围- 只需coder向下传递提供的对象将导致存档中的名称冲突.
提前致谢!