我已经将nsview子类化,并希望实现简历功能。在我退出应用程序之前,编码代码运行:
-(void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
[coder encodeObject:[NSValue valueWithRect:self.originalFrame] forKey:@"originalFrame"];
[super encodeRestorableStateWithCoder:coder];
}
再次启动应用程序时,永远不会调用restoreStateWithCoder?
答案 0 :(得分:2)
我遇到了同样的问题,并在NSUserInterfaceItemIdentification protocol reference中找到了解决方案:
在窗口恢复操作期间唯一地使用标识符 识别应用程序的窗口。您可以设置此值 以编程方式或在Interface Builder中。如果您创建一个项目 在Interface Builder中,不要为此字符串设置值,这是唯一的 加载nib文件时为该项创建值。 :用于 以编程方式创建视图,通常在之后设置此值 在将项目添加到窗口之前创建项目。
我确实以编程方式创建了我的视图,因此没有设置标识符,窗口恢复机制也没有调用视图恢复方法。
在将视图添加到窗口之前,您需要设置如下标识符:
_exampleView.identifier = @"ExampleIdentifier";
如果您的视图随后调用[self invalidateRestorableState]
,系统将在适当的时间调用encodeRestorableStateWithCoder
,一切都按预期工作。