Re: [問題] Saving a NSWindow's position into th …

看板MacDev作者 (zonble)時間15年前 (2010/08/12 00:30), 編輯推噓4(404)
留言8則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《copyshaft (冒煙的洋蔥)》之銘言: : 2. 以自定字串(見程式碼)取代 [window representedFilename] : 在init 呼叫 setFrameAutosaveName 回傳BOOL一直是NO : Note: 在Interface Builder的attribute inspector : 針對該Window/Panel 可直接設定autosave name。 : 不過透過以上程式做設定卻不成功。 : 懇請版上的朋友能指點我理解上的盲點和範例程式上的錯誤。 : 感激不盡。 我們來看程式 - (MyPanelController *)init { NSWindow *window = [self window]; [[window windowController] setShouldCascadeWindows:NO]; [window setFrameAutosaveName:@"com.smokyonion.MyPanelFrameAutosaveName"]); return [super initWithWindowNibName:@"MyPanel"]; } 第一:你在 [super initWith...] 之前,就想要存取成員 變數,這個時候連 self 都還沒有產生,又怎麼可能拿到 [self window] 呢? 第二:MyPanelController 繼承自 NSWindowController, NSWindowController 的行為是 lazy loading,大概是到了 呼叫 [NSWindowController showWindow:] 的時候,才會去 載入 nib,也是這個時候才會有 [self window] 物件。 然後是另外幾個問題 - (void)awakeFromNib { NSWindow *window = [self window]; [window setFrameFromString:@"com.smokyonion.MyPanelFrameAutosaveName"]; } NSWindow 的 setFrameFromString: 不是這樣用的。setFrameFromString 的用途是設定 stringWithSavedFrame 所給你的代表 frame 的 字串,而這個字串不是 autosave name。 setFrameFromString: 裡頭的字串,是將 NSRect 轉換成 字串 表現的東西,例如: NSRect windowFrame = NSMakeRect(,,,); NSString *windowFrameString = NSStringFromRect(windowFrame); [window setFrameFromString:windowFrameString]; 另外: - (void)openMyPanel:(id)sender { NSWindow *window = [self window]; if(![window isVisible]) [window orderFront:sender]; } - (IBAction)closeMyPanel:(id)sender { NSWindow *window = [self window]; if([window isVisible]) [window orderOut:sender]; } 這兩個 method 都沒什麼必要,NSWindowController 自己 就已經實作了 showWindow: 跟 close: 了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.44.181.103

08/12 16:17, , 1F
zonble大哥,真的非常謝謝你的回覆和指教。感激不盡。
08/12 16:17, 1F

08/12 16:36, , 2F
修改後的版本只需要在awakeFromNib設定
08/12 16:36, 2F

08/12 16:37, , 3F
setFrameAutosaveName即可。
08/12 16:37, 3F


08/12 16:54, , 5F
昨天寫了篇東西,有空看一下
08/12 16:54, 5F

08/12 17:14, , 6F
gist已更新。連結如原post.
08/12 17:14, 6F

08/12 17:23, , 7F
http://bit.ly/bRcOfO 網路上的文章,供大家參考
08/12 17:23, 7F

08/12 17:24, , 8F
NSViewController, the New C in MVC - Pt. 1 of 3
08/12 17:24, 8F
文章代碼(AID): #1COj0Uu8 (MacDev)
文章代碼(AID): #1COj0Uu8 (MacDev)