2013-07-29 52 views
2

我已經創建了一個nsview的子類,並且要實現恢復功能。我之前退出應用程序編碼代碼運行:restoreStateWithCoder在NSView中未觸發

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

當再次啓動應用程序,restoreStateWithCoder不會被調用?

回答

2

我有同樣的問題,並找到解決方案在NSUserInterfaceItemIdentification protocol reference

標識符被在窗口恢復操作中使用的唯一 識別應用程序的窗口。您可以以編程方式或在Interface Builder中設置此 字符串的值。如果在Interface Builder中創建項目 ,並且不爲此字符串設置值,則會在加載nib文件時爲該項目創建唯一的 值。 對於 以編程方式創建的視圖,通常在創建項目之後但在將其添加到窗口之前,您通常將此值設置爲 。

我做編程創建我的看法,所以沒有標識符,並在窗口恢復機制沒有調用視圖恢復方法來設置。

之前將您的視圖窗口中,您需要設置的標識是這樣的:

_exampleView.identifier = @"ExampleIdentifier"; 

如果您認爲然後調用[self invalidateRestorableState],系統會調用encodeRestorableStateWithCoder在適當的時候,一切都按預期工作。

+2

encodeRestorableStateWithCoder被調用。但是不調用restoreStateWithCoder。我已經爲視圖設置了標識符。 – VBK

+0

包含視圖的窗口是否得到正確恢復? – Lextar

+0

是的大小和框架得到恢復。 – VBK