restoreStateWithCoder不在NSView中触发

时间:2013-07-29 10:02:36

标签: cocoa nsview restore

我已经将nsview子类化,并希望实现简历功能。在我退出应用程序之前,编码代码运行:

-(void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
     [coder encodeObject:[NSValue valueWithRect:self.originalFrame] forKey:@"originalFrame"];
    [super encodeRestorableStateWithCoder:coder];
}

再次启动应用程序时,永远不会调用restoreStateWithCoder?

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,并在NSUserInterfaceItemIdentification protocol reference中找到了解决方案:

  

在窗口恢复操作期间唯一地使用标识符   识别应用程序的窗口。您可以设置此值   以编程方式或在Interface Builder中。如果您创建一个项目   在Interface Builder中,不要为此字符串设置值,这是唯一的   加载nib文件时为该项创建值。 :用于   以编程方式创建视图,通常在之后设置此值   在将项目添加到窗口之前创建项目。

我确实以编程方式创建了我的视图,因此没有设置标识符,窗口恢复机制也没有调用视图恢复方法。

在将视图添加到窗口之前,您需要设置如下标识符:

_exampleView.identifier = @"ExampleIdentifier";

如果您的视图随后调用[self invalidateRestorableState],系统将在适当的时间调用encodeRestorableStateWithCoder,一切都按预期工作。