任何想法在resume(用户界面保存)目的窗口中存档NSViewController
的最佳做法是什么?我尝试将它归档到窗口控制器的encodeRestorableStateWithCoder:
方法中,以仅在调用restoreStateWithCoder:
时才能发现视图控制器未被取消存档。为Lion的用户界面恢复功能编码NSViewController
// 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;
}
}
注意,这个视图控制器包含一个管理自己的子视图,因此将需要在NSCoder
比如有的作用域其他视图控制器 - 简单地通过所提供的coder
对象向下将导致压缩文件名冲突。
在此先感谢!
它可能正在使用安全编码,您是否尝试过使用'-decodeObjectOfClass:forKey:'来代替? – Pol 2015-02-20 20:25:47