【发布时间】:2013-02-13 01:25:05
【问题描述】:
知道将NSViewController 归档在窗口内以用于resume(用户界面保留)目的的最佳做法是什么?我尝试在窗口控制器的 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;
}
}
请注意,此视图控制器包含管理自己的子视图的其他视图控制器,因此需要在 NSCoder 实例中进行一些范围界定 - 只需向下传递提供的 coder 对象将导致存档中的名称冲突。
提前致谢!
【问题讨论】:
-
它可能使用了安全编码,你试过
-decodeObjectOfClass:forKey:吗?
标签: cocoa osx-lion appkit resume nsarchiving