resume(ユーザーインターフェースの保存)の目的で、NSViewController
をウィンドウ内に保存するベストプラクティスはありますか?私はウィンドウコントローラのencodeRestorableStateWithCoder:
メソッドでそれをアーカイブしようとしましたが、restoreStateWithCoder:
が呼び出されたときにView Controllerがアーカイブ解除されないことがわかりました。単にアーカイブ内の名前の衝突が発生します提供coder
オブジェクトの下方に渡す - このビューコントローラがNSCoder
インスタンス内のいくつかのスコープが必要になりますので、自分のサブビューを管理し、他のビューコントローラが含まれていることをNSViewControllerをエンコードしてLionのユーザーインターフェイスを再開する機能
// 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;
}
}
注意。
ありがとうございます!
セキュリティで保護されたコードを使用している可能性がありますが、代わりに '-decodeObjectOfClass:forKey:'を試しましたか? – Pol