2

我已经子类化了一个 nsview 并希望实现恢复功能。在我退出应用程序之前,编码代码运行:

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

再次启动应用程序时,从不调用 restoreStateWithCoder 吗?

4

1 回答 1

2

我刚刚遇到了同样的问题,并在NSUserInterfaceItemIdentification 协议参考中找到了解决方案:

在窗口恢复操作期间使用标识符来唯一标识应用程序的窗口。您可以通过编程方式或在 Interface Builder 中设置此字符串的值。如果您在 Interface Builder 中创建一个项目并且没有为此字符串设置值,则在加载 nib 文件时会为该项目创建一个唯一值。对于以编程方式创建的视图,您通常在创建项目之后但在将其添加到窗口之前设置此值。

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

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

_exampleView.identifier = @"ExampleIdentifier";

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

于 2013-08-01T14:56:21.667 回答