2013-01-17 48 views
1

我正在構建一個Mac應用程序。我將childWindowController添加到mainWindow。在我的childWindowController中,我有幾個按鈕,其操作在IB中連接。但是當我按NSButton,應用程序崩潰,我在終端中得到EXC_BAD_ACCESS消息。我也試圖執行setTarget:self,但這根本沒有幫助。在NSWindowController上按下NSButton時EXC_BAD_ACCESS

這裏是我的代碼:在applicationDidFinishLaunching

HomeWindowController *home_WindowController = [[[HomeWindowController alloc] initWithWindowNibName:@"HomeWindowController"] autorelease];<br/><br/> 
[[self window] addChildWindow:home_WindowController.window 
         ordered:NSWindowAbove]; 

而在HomeWindowController:

- (id)initWithWindowNibName:(NSString *)windowNibName 
{ 
    self = [super initWithWindowNibName:windowNibName]; 
    if (self) { 
     // Initialization code here. 

    } 
    return self; 
} 

- (void)windowDidLoad 
{ 
    [super windowDidLoad]; 
} 

-(IBAction)action:(id)sender 
{ 
    NSLog(@"------------------ "); 
} 

這裏有什麼問題?我將NSButton綁定到FileOwner及其操作。通常與IB的iOS相同。當我不綁定IBAction時,我沒有得到EXC_BAD_ACCESS

+0

請包括堆棧跟蹤。 –

+0

那是什麼?如果你的意思是終端跟蹤,當我點擊NSButton Outlet時,我遇到了錯誤的訪問地址錯誤。 – Vacca

+1

XCode版本? ARC和垃圾收集,打開還是關閉? –

回答

2

它終於得到了解決,我在的appDelegate方法釋放childWindowController加入它主要window.But我不明白爲什麼不能我鬆開後...

因爲你自己的窗口控制器和窗口控制器擁有它的窗口。該窗口不保持其控制器活着; 你是。而當你不在的時候,它就會從任何可能想要與之交談的東西中消失,比如一個按鈕就是它的目標。更普遍的是,試圖擺脫對其他對象的所有權責任 - 例如,期待一個窗口擁有它的WC給你 - 正在尋求內存管理的錯誤。 (我唯一的例外是通過集合間接地擁有對象:如果我擁有一個充滿事物的數組,我不會保留並單獨釋放每個Thing,期望勝過我。)

因爲它是AppDelegate上的childWindowController的本地實例(僅用於上面的添加)?

我不明白你的意思。

相關問題