Eine Idee, was sind die besten Praktiken für die Archivierung eines NSViewController
in einem Fenster für resume (Benutzeroberfläche Erhaltung) Zwecke? Ich habe versucht, es in den encodeRestorableStateWithCoder:
Methoden des Fenstercontrollers zu archivieren, nur um herauszufinden, dass der Ansichtsteuerpult nicht entpackt wird, wenn restoreStateWithCoder:
aufgerufen wird.Encoding NSViewController für Lions Benutzeroberfläche Wiederaufnahme-Funktion
// 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;
}
}
Beachten Sie, dass diese Ansicht-Controller andere Ansicht-Controller enthält, die ihre eigenen Subviews schafft und damit eine gewisse Scoping im NSCoder
Instanz müssen - einfach die mitgelieferten coder
nach unten Objekt übergeben werden Namenskonflikte im Archiv verursachen.
Vielen Dank im Voraus!
Es könnte sein, verwenden Sie sichere Codierung, haben Sie versucht '-decodeObjectOfClass: forKey:' stattdessen? – Pol