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 に答える