Re: [問題] Saving a NSWindow's position into th …
※ 引述《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
08/12 16:17, 1F
推
08/12 16:36, , 2F
08/12 16:36, 2F
→
08/12 16:37, , 3F
08/12 16:37, 3F
→
08/12 16:54, , 4F
08/12 16:54, 4F
→
08/12 16:54, , 5F
08/12 16:54, 5F
推
08/12 17:14, , 6F
08/12 17:14, 6F
推
08/12 17:23, , 7F
08/12 17:23, 7F
→
08/12 17:24, , 8F
08/12 17:24, 8F
討論串 (同標題文章)
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章